mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 20:47:10 +01:00
Reduce lines by removing blank lines added by PJ's script
This commit is contained in:
@@ -323,7 +323,6 @@
|
||||
if(L && L.client && !L.client.ambience_playing && (L.client.prefs.sound & SOUND_BUZZ)) //split off the white noise from the rest of the ambience because of annoyance complaints - Kluys
|
||||
L.client.ambience_playing = 1
|
||||
to_chat(L, sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = 2))
|
||||
|
||||
else if (L && L.client && !(L.client.prefs.sound & SOUND_BUZZ)) L.client.ambience_playing = 0
|
||||
|
||||
if(prob(35) && !newarea.media_source && L && L.client && (L.client.prefs.sound & SOUND_AMBIENCE))
|
||||
@@ -331,7 +330,6 @@
|
||||
|
||||
if(!L.client.played)
|
||||
to_chat(L, sound(sound, repeat = 0, wait = 0, volume = 25, channel = 1))
|
||||
|
||||
L.client.played = 1
|
||||
spawn(600) //ewww - this is very very bad
|
||||
if(L.&& L.client)
|
||||
@@ -366,7 +364,6 @@
|
||||
|
||||
to_chat(M, "Gravity!")
|
||||
|
||||
|
||||
/proc/has_gravity(atom/AT, turf/T)
|
||||
if(!T)
|
||||
T = get_turf(AT)
|
||||
|
||||
@@ -182,26 +182,20 @@
|
||||
f_name += "oil-stained [name][infix]."
|
||||
|
||||
to_chat(user, "\icon[src] That's [f_name] [suffix]")
|
||||
|
||||
to_chat(user, desc)
|
||||
|
||||
|
||||
if(reagents && is_open_container()) //is_open_container() isn't really the right proc for this, but w/e
|
||||
to_chat(user, "It contains:")
|
||||
|
||||
if(reagents.reagent_list.len)
|
||||
if(user.can_see_reagents()) //Show each individual reagent
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
to_chat(user, "[R.volume] units of [R.name]")
|
||||
|
||||
else //Otherwise, just show the total volume
|
||||
if(reagents && reagents.reagent_list.len)
|
||||
to_chat(user, "[reagents.total_volume] units of various reagents.")
|
||||
|
||||
else
|
||||
to_chat(user, "Nothing.")
|
||||
|
||||
|
||||
return distance == -1 || (get_dist(src, user) <= distance) || isobserver(user) //observers do not have a range limit
|
||||
|
||||
/atom/proc/relaymove()
|
||||
@@ -412,7 +406,6 @@
|
||||
if(cur_y)
|
||||
break
|
||||
// to_chat(world, "X = [cur_x]; Y = [cur_y]")
|
||||
|
||||
if(cur_x && cur_y)
|
||||
return list("x"=cur_x,"y"=cur_y)
|
||||
else
|
||||
|
||||
@@ -148,15 +148,12 @@
|
||||
return
|
||||
if (!ishuman(usr)) //Make sure they're a mob that has dna
|
||||
to_chat(usr, "<span class='notice'>Try as you might, you can not climb up into the [src].</span>")
|
||||
|
||||
return
|
||||
if (src.occupant)
|
||||
to_chat(usr, "<span class='boldnotice'>The [src] is already occupied!</span>")
|
||||
|
||||
return
|
||||
if (usr.abiotic())
|
||||
to_chat(usr, "<span class='boldnotice'>Subject cannot have abiotic items on.</span>")
|
||||
|
||||
return
|
||||
usr.stop_pulling()
|
||||
usr.client.perspective = EYE_PERSPECTIVE
|
||||
@@ -188,19 +185,16 @@
|
||||
return
|
||||
if(occupant)
|
||||
to_chat(user, "<span class='boldnotice'>The [src] is already occupied!</span>")
|
||||
|
||||
return
|
||||
var/mob/living/L = O
|
||||
if(!istype(L) || L.buckled)
|
||||
return
|
||||
if(L.abiotic())
|
||||
to_chat(user, "<span class='danger'>Subject cannot have abiotic items on.</span>")
|
||||
|
||||
return
|
||||
for(var/mob/living/carbon/slime/M in range(1,L))
|
||||
if(M.Victim == L)
|
||||
to_chat(usr, "[L.name] will not fit into the [src] because they have a slime latched onto their head.")
|
||||
|
||||
return
|
||||
if (L == user)
|
||||
visible_message("[user] climbs into the [src].")
|
||||
@@ -214,7 +208,6 @@
|
||||
if(istype(item, /obj/item/weapon/screwdriver))
|
||||
if(occupant)
|
||||
to_chat(user, "<span class='notice'>The maintenance panel is locked.</span>")
|
||||
|
||||
return
|
||||
default_deconstruction_screwdriver(user, "[icon_state]_maintenance", "[initial(icon_state)]", item)
|
||||
|
||||
@@ -230,12 +223,10 @@
|
||||
else if(istype(item, /obj/item/weapon/reagent_containers/glass))
|
||||
if(beaker)
|
||||
to_chat(user, "<span class='warning'>A beaker is already loaded into the machine.</span>")
|
||||
|
||||
return
|
||||
|
||||
if(!user.drop_item())
|
||||
to_chat(user, "<span class='warning'>\The [item] is stuck to you!</span>")
|
||||
|
||||
return
|
||||
|
||||
beaker = item
|
||||
@@ -249,15 +240,12 @@
|
||||
return
|
||||
if (src.occupant)
|
||||
to_chat(user, "<span class='boldnotice'>The scanner is already occupied!</span>")
|
||||
|
||||
return
|
||||
if (G.affecting.abiotic())
|
||||
to_chat(user, "<span class='boldnotice'>Subject cannot have abiotic items on.</span>")
|
||||
|
||||
return
|
||||
if(panel_open)
|
||||
to_chat(usr, "<span class='boldnotice'>Close the maintenance panel first.</span>")
|
||||
|
||||
return
|
||||
put_in(G.affecting)
|
||||
src.add_fingerprint(user)
|
||||
@@ -286,20 +274,16 @@
|
||||
var/mob/dead/observer/ghost = occupant.get_ghost()
|
||||
if(ghost)
|
||||
to_chat(ghost, "<span class='ghostalert'>Your corpse has been placed into a cloning scanner. Return to your body if you want to be cloned!</span> (Verbs -> Ghost -> Re-enter corpse)")
|
||||
|
||||
to_chat(ghost, sound('sound/effects/genetics.ogg'))
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/dna_scannernew/proc/go_out()
|
||||
if (!src.occupant)
|
||||
to_chat(usr, "<span class='warning'>The scanner is empty!</span>")
|
||||
|
||||
return
|
||||
|
||||
if (src.locked)
|
||||
to_chat(usr, "<span class='warning'>The scanner is locked!</span>")
|
||||
|
||||
return
|
||||
|
||||
if (src.occupant.client)
|
||||
@@ -398,7 +382,6 @@
|
||||
I.forceMove(src)
|
||||
src.disk = I
|
||||
to_chat(user, "You insert [I].")
|
||||
|
||||
nanomanager.update_uis(src) // update all UIs attached to src()
|
||||
return
|
||||
else
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
M.sdisabilities|=sdisability
|
||||
if(activation_message)
|
||||
to_chat(M, "\red [activation_message]")
|
||||
|
||||
else
|
||||
testing("[name] has no activation message.")
|
||||
|
||||
@@ -49,7 +48,6 @@
|
||||
M.sdisabilities &= ~sdisability
|
||||
if(deactivation_message)
|
||||
to_chat(M, "\red [deactivation_message]")
|
||||
|
||||
else
|
||||
testing("[name] has no deactivation message.")
|
||||
|
||||
|
||||
@@ -118,10 +118,8 @@
|
||||
var/msg = pick(activation_messages)
|
||||
to_chat(M, "\blue [msg]")
|
||||
|
||||
|
||||
/datum/dna/gene/basic/deactivate(var/mob/M)
|
||||
M.mutations.Remove(mutation)
|
||||
if(deactivation_messages.len)
|
||||
var/msg = pick(deactivation_messages)
|
||||
to_chat(M, "\red [msg]")
|
||||
|
||||
|
||||
@@ -44,7 +44,6 @@
|
||||
if(L == owner)
|
||||
continue
|
||||
to_chat(L, "<span class='danger'>You are enveloped by a soft green glow emanating from [owner].</span>")
|
||||
|
||||
L.apply_effect(5, IRRADIATE)
|
||||
return
|
||||
|
||||
@@ -290,10 +289,8 @@
|
||||
continue
|
||||
if (src.variant == 2)
|
||||
to_chat(C, "\red [src.personalized_stink]")
|
||||
|
||||
else
|
||||
to_chat(C, "\red [stinkString()]")
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@@ -335,7 +332,6 @@
|
||||
|
||||
/* if(!targets.len) Uncomment this to allow the power to be used on targets other than yourself. That said, if you uncomment this I will find you and hurt you. Uncounterable and untracable burn damage with a 60-second cooldown is fun for exactly one person, and that's the person who is using it.
|
||||
to_chat(usr, "<span class='notice'>No target found in range.</span>")
|
||||
|
||||
return
|
||||
|
||||
var/mob/living/carbon/L = targets[1]
|
||||
|
||||
@@ -152,14 +152,12 @@
|
||||
/obj/effect/proc_holder/spell/targeted/cryokinesis/cast(list/targets)
|
||||
if(!targets.len)
|
||||
to_chat(usr, "<span class='notice'>No target found in range.</span>")
|
||||
|
||||
return
|
||||
|
||||
var/mob/living/carbon/C = targets[1]
|
||||
|
||||
if(!iscarbon(C))
|
||||
to_chat(usr, "\red This will only work on normal organic beings.")
|
||||
|
||||
return
|
||||
|
||||
if (RESIST_COLD in C.mutations)
|
||||
@@ -306,7 +304,6 @@
|
||||
var/mob/user = usr
|
||||
if(!targets.len)
|
||||
to_chat(user, "<span class='notice'>No target found in range.</span>")
|
||||
|
||||
return
|
||||
|
||||
var/atom/movable/the_item = targets[1]
|
||||
@@ -323,32 +320,27 @@
|
||||
var/obj/item/organ/external/limb = H.get_organ(user.zone_sel.selecting)
|
||||
if(!istype(limb))
|
||||
to_chat(user, "<span class='warning'>You can't eat this part of them!</span>")
|
||||
|
||||
revert_cast()
|
||||
return 0
|
||||
if(istype(limb,/obj/item/organ/external/head))
|
||||
// Bullshit, but prevents being unable to clone someone.
|
||||
to_chat(user, "<span class='warning'>You try to put \the [limb] in your mouth, but [t_his] ears tickle your throat!</span>")
|
||||
|
||||
revert_cast()
|
||||
return 0
|
||||
if(istype(limb,/obj/item/organ/external/chest))
|
||||
// Bullshit, but prevents being able to instagib someone.
|
||||
to_chat(user, "<span class='warning'>You try to put their [limb] in your mouth, but it's too big to fit!</span>")
|
||||
|
||||
revert_cast()
|
||||
return 0
|
||||
user.visible_message("<span class='danger'>[user] begins stuffing [the_item]'s [limb.name] into [m_his] gaping maw!</span>")
|
||||
var/oldloc = H.loc
|
||||
if(!do_mob(user,H,EAT_MOB_DELAY))
|
||||
to_chat(user, "<span class='danger'>You were interrupted before you could eat [the_item]!</span>")
|
||||
|
||||
else
|
||||
if(!limb || !H)
|
||||
return
|
||||
if(H.loc != oldloc)
|
||||
to_chat(user, "<span class='danger'>\The [limb] moved away from your mouth!</span>")
|
||||
|
||||
return
|
||||
user.visible_message("<span class='danger'>[user] [pick("chomps","bites")] off [the_item]'s [limb]!</span>")
|
||||
playsound(user.loc, 'sound/items/eatfood.ogg', 50, 0)
|
||||
@@ -399,7 +391,6 @@
|
||||
var/failure = 0
|
||||
if (istype(usr.loc,/mob/) || usr.lying || usr.stunned || usr.buckled || usr.stat)
|
||||
to_chat(usr, "\red You can't jump right now!")
|
||||
|
||||
return
|
||||
|
||||
if (istype(usr.loc,/turf/))
|
||||
@@ -445,7 +436,6 @@
|
||||
if (istype(usr.loc,/obj/))
|
||||
var/obj/container = usr.loc
|
||||
to_chat(usr, "\red You leap and slam your head against the inside of [container]! Ouch!")
|
||||
|
||||
usr.AdjustParalysis(3)
|
||||
usr.AdjustWeakened(5)
|
||||
container.visible_message("\red <b>[usr.loc]</b> emits a loud thump and rattles a bit.")
|
||||
@@ -499,7 +489,6 @@
|
||||
var/mob/living/M=targets[1]
|
||||
if(!ishuman(M))
|
||||
to_chat(usr, "\red You can only change your appearance to that of another human.")
|
||||
|
||||
return
|
||||
|
||||
if(!ishuman(usr)) return
|
||||
@@ -561,25 +550,20 @@
|
||||
for(var/mob/living/carbon/M in targets)
|
||||
if(!iscarbon(M))
|
||||
to_chat(usr, "\red You may only use this on other organic beings.")
|
||||
|
||||
return
|
||||
|
||||
if (PSY_RESIST in M.mutations)
|
||||
to_chat(usr, "\red You can't see into [M.name]'s mind at all!")
|
||||
|
||||
return
|
||||
|
||||
if (M.stat == 2)
|
||||
to_chat(usr, "\red [M.name] is dead and cannot have their mind read.")
|
||||
|
||||
return
|
||||
if (M.health < 0)
|
||||
to_chat(usr, "\red [M.name] is dying, and their thoughts are too scrambled to read.")
|
||||
|
||||
return
|
||||
|
||||
to_chat(usr, "\blue Mind Reading of [M.name]:</b>")
|
||||
|
||||
var/pain_condition = M.health
|
||||
// lower health means more pain
|
||||
var/list/randomthoughts = list("what to have for lunch","the future","the past","money",
|
||||
@@ -597,34 +581,25 @@
|
||||
switch(pain_condition)
|
||||
if (81 to INFINITY)
|
||||
to_chat(usr, "\blue <b>Condition</b>: [M.name] feels good.")
|
||||
|
||||
if (61 to 80)
|
||||
to_chat(usr, "\blue <b>Condition</b>: [M.name] is suffering mild pain.")
|
||||
|
||||
if (41 to 60)
|
||||
to_chat(usr, "\blue <b>Condition</b>: [M.name] is suffering significant pain.")
|
||||
|
||||
if (21 to 40)
|
||||
to_chat(usr, "\blue <b>Condition</b>: [M.name] is suffering severe pain.")
|
||||
|
||||
else
|
||||
to_chat(usr, "\blue <b>Condition</b>: [M.name] is suffering excruciating pain.")
|
||||
|
||||
thoughts = "haunted by their own mortality"
|
||||
|
||||
switch(M.a_intent)
|
||||
if (I_HELP)
|
||||
to_chat(usr, "\blue <b>Mood</b>: You sense benevolent thoughts from [M.name].")
|
||||
|
||||
if (I_DISARM)
|
||||
to_chat(usr, "\blue <b>Mood</b>: You sense cautious thoughts from [M.name].")
|
||||
|
||||
if (I_GRAB)
|
||||
to_chat(usr, "\blue <b>Mood</b>: You sense hostile thoughts from [M.name].")
|
||||
|
||||
if (I_HARM)
|
||||
to_chat(usr, "\blue <b>Mood</b>: You sense cruel thoughts from [M.name].")
|
||||
|
||||
for(var/mob/living/L in view(7,M))
|
||||
if (L == M)
|
||||
continue
|
||||
@@ -633,7 +608,6 @@
|
||||
else
|
||||
to_chat(usr, "\blue <b>Mood</b>: You sense strange thoughts from [M.name].")
|
||||
|
||||
|
||||
if (istype(M,/mob/living/carbon/human))
|
||||
var/numbers[0]
|
||||
var/mob/living/carbon/human/H = M
|
||||
@@ -642,16 +616,12 @@
|
||||
numbers += H.mind.initial_account.remote_access_pin
|
||||
if(numbers.len>0)
|
||||
to_chat(usr, "\blue <b>Numbers</b>: You sense the number[numbers.len>1?"s":""] [english_list(numbers)] [numbers.len>1?"are":"is"] important to [M.name].")
|
||||
|
||||
to_chat(usr, "\blue <b>Thoughts</b>: [M.name] is currently [thoughts].")
|
||||
|
||||
|
||||
if (EMPATH in M.mutations)
|
||||
to_chat(M, "\red You sense [usr.name] reading your mind.")
|
||||
|
||||
else if (prob(5) || M.mind.assigned_role=="Chaplain")
|
||||
to_chat(M, "\red You sense someone intruding upon your thoughts...")
|
||||
|
||||
return
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
@@ -699,11 +669,9 @@
|
||||
if (M == usr)
|
||||
continue
|
||||
to_chat(M, "<span class='warning'>You are sent flying!</span>")
|
||||
|
||||
M.Weaken(5)
|
||||
step_away(M, UT, 15)
|
||||
step_away(M, UT, 15)
|
||||
step_away(M, UT, 15)
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>You were interrupted and couldn't fart! Rude!</span>")
|
||||
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
|
||||
to_chat(H, "<B>You are now a [H.species.name].</B>")
|
||||
|
||||
|
||||
return H
|
||||
|
||||
/datum/dna/gene/monkey/deactivate(var/mob/living/carbon/human/H, var/connected, var/flags)
|
||||
@@ -91,5 +90,4 @@
|
||||
|
||||
to_chat(H, "<B>You are now a [H.species.name].</B>")
|
||||
|
||||
|
||||
return H
|
||||
@@ -164,7 +164,6 @@
|
||||
M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH //temporary fix until the problem can be solved.
|
||||
to_chat(M, "<span class='danger'>You suddenly feel very weak.</span>")
|
||||
|
||||
|
||||
/datum/dna/gene/basic/xray
|
||||
name="X-Ray Vision"
|
||||
activation_messages=list("The walls suddenly disappear.")
|
||||
|
||||
@@ -50,7 +50,6 @@ Obviously, requires DNA2.
|
||||
M.update_body()
|
||||
to_chat(M, "\red You suddenly feel very weak.")
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/hulk
|
||||
name = "Hulk Out"
|
||||
panel = "Abilities"
|
||||
@@ -74,7 +73,6 @@ Obviously, requires DNA2.
|
||||
/obj/effect/proc_holder/spell/targeted/hulk/cast(list/targets)
|
||||
if (istype(usr.loc,/mob/))
|
||||
to_chat(usr, "\red You can't hulk out right now!")
|
||||
|
||||
return
|
||||
var/mob/living/carbon/human/M=usr
|
||||
M.hulk_time = world.time + HULK_DURATION
|
||||
@@ -125,7 +123,6 @@ Obviously, requires DNA2.
|
||||
|
||||
if (istype(usr.loc,/mob/))
|
||||
to_chat(usr, "\red You can't change your appearance right now!")
|
||||
|
||||
return
|
||||
var/mob/living/carbon/human/M=usr
|
||||
|
||||
@@ -232,7 +229,6 @@ Obviously, requires DNA2.
|
||||
|
||||
if(!validtargets.len)
|
||||
to_chat(usr, "<span class='warning'>There are no valid targets!</span>")
|
||||
|
||||
start_recharge()
|
||||
return
|
||||
|
||||
@@ -298,7 +294,6 @@ Obviously, requires DNA2.
|
||||
|
||||
if(!validtargets.len || validtargets.len == 1)
|
||||
to_chat(usr, "<span class='warning'>No valid targets with remote view were found!</span>")
|
||||
|
||||
start_recharge()
|
||||
return
|
||||
|
||||
@@ -321,7 +316,6 @@ Obviously, requires DNA2.
|
||||
|
||||
if(istype(user.l_hand, /obj/item/tk_grab) || istype(user.r_hand, /obj/item/tk_grab/))
|
||||
to_chat(user, "\red Your mind is too busy with that telekinetic grab.")
|
||||
|
||||
user.remoteview_target = null
|
||||
user.reset_view(0)
|
||||
return
|
||||
|
||||
@@ -24,22 +24,18 @@
|
||||
/obj/item/weapon/antag_spawner/borg_tele/attack_self(mob/user as mob)
|
||||
if(used)
|
||||
to_chat(user, "<span class='warning'>[src] is out of power!</span>")
|
||||
|
||||
return
|
||||
if(!(user.mind in ticker.mode.syndicates))
|
||||
to_chat(user, "<span class='danger'>AUTHENTICATION FAILURE. ACCESS DENIED.</span>")
|
||||
|
||||
return 0
|
||||
if(checking)
|
||||
to_chat(user, "<span class='warning'>[src] is already checking for possible borgs.</span>")
|
||||
|
||||
return
|
||||
borg_to_spawn = input("What type of borg would you like to teleport?", "Cyborg Type", type) as null|anything in possible_types
|
||||
if(!borg_to_spawn || checking || used)
|
||||
return
|
||||
checking = 1
|
||||
to_chat(user, "<span class='notice'>The device is now checking for possible borgs.</span>")
|
||||
|
||||
var/list/borg_candidates = pollCandidates("Do you want to play as a Syndicate [borg_to_spawn] borg?", ROLE_OPERATIVE, 1)
|
||||
if(borg_candidates.len > 0 && !used)
|
||||
checking = 0
|
||||
@@ -50,7 +46,6 @@
|
||||
else
|
||||
checking = 0
|
||||
to_chat(user, "<span class='notice'>Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.</span>")
|
||||
|
||||
return
|
||||
|
||||
/obj/item/weapon/antag_spawner/borg_tele/spawn_antag(var/client/C, var/turf/T, var/type = "")
|
||||
@@ -81,33 +76,27 @@
|
||||
/obj/item/weapon/antag_spawner/slaughter_demon/attack_self(mob/user as mob)
|
||||
if(user.z == ZLEVEL_CENTCOMM)//this is to make sure the wizard does NOT summon a demon from the Den..
|
||||
to_chat(user, "<span class='notice'>You should probably wait until you reach the station.</span>")
|
||||
|
||||
return
|
||||
|
||||
if(used)
|
||||
to_chat(user, "<span class='notice'>This bottle already has a broken seal.</span>")
|
||||
|
||||
return
|
||||
used = 1
|
||||
to_chat(user, "<span class='notice'>You break the seal on the bottle, calling upon the dire spirits of the underworld...</span>")
|
||||
|
||||
|
||||
var/list/candidates = pollCandidates("Do you want to play as a slaughter demon summoned by [user.real_name]?", ROLE_DEMON, 1, 100)
|
||||
|
||||
if(candidates.len > 0)
|
||||
var/mob/C = pick(candidates)
|
||||
spawn_antag(C, get_turf(src.loc), "Slaughter Demon", user)
|
||||
to_chat(user, "<span class='notice'>You shatter the bottle, no turning back now!</span>")
|
||||
|
||||
to_chat(user, "<span class='notice'>You sense a dark presence lurking just beyond the veil...</span>")
|
||||
|
||||
playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1)
|
||||
qdel(src)
|
||||
else
|
||||
used = 0
|
||||
to_chat(user, "<span class='notice'>The demons do not respond to your summon. Perhaps you should try again later.</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/antag_spawner/slaughter_demon/spawn_antag(var/client/C, var/turf/T, var/type = "", mob/user as mob)
|
||||
var /obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T)
|
||||
var/mob/living/simple_animal/slaughter/S = new /mob/living/simple_animal/slaughter/(holder)
|
||||
@@ -128,6 +117,4 @@
|
||||
S.mind.objectives += KillDaCrew
|
||||
S.mind.objectives += KillDaCrew
|
||||
to_chat(S, "<B>Objective #[1]</B>: [KillDaWiz.explanation_text]")
|
||||
|
||||
to_chat(S, "<B>Objective #[2]</B>: [KillDaCrew.explanation_text]")
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
..()
|
||||
to_chat(world, "<B>Game mode is AutoTraitor. Traitors will be added to the round automagically as needed.</B>")
|
||||
|
||||
|
||||
/datum/game_mode/traitor/autotraitor/pre_setup()
|
||||
|
||||
if(config.protect_roles_from_antagonist)
|
||||
@@ -135,9 +134,7 @@
|
||||
|
||||
traitors += newtraitor.mind
|
||||
to_chat(newtraitor, "\red <B>ATTENTION:</B> \black It is time to pay your debt to the Syndicate...")
|
||||
|
||||
to_chat(newtraitor, "<B>You are now a traitor.</B>")
|
||||
|
||||
newtraitor.mind.special_role = "traitor"
|
||||
var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR]
|
||||
tatorhud.join_hud(newtraitor)
|
||||
@@ -145,10 +142,8 @@
|
||||
|
||||
var/obj_count = 1
|
||||
to_chat(newtraitor, "\blue Your current objectives:")
|
||||
|
||||
for(var/datum/objective/objective in newtraitor.mind.objectives)
|
||||
to_chat(newtraitor, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
|
||||
obj_count++
|
||||
//else
|
||||
//message_admins("No new traitor being added.")
|
||||
|
||||
@@ -72,7 +72,6 @@ var/list/blob_nodes = list()
|
||||
log_game("[blob.key] (ckey) has been selected as a Blob")
|
||||
greet_blob(blobmind)
|
||||
to_chat(blob, "<span class='userdanger'>You feel very tired and bloated! You don't have long before you burst!</span>")
|
||||
|
||||
spawn(600)
|
||||
burst_blob(blobmind)
|
||||
return 1
|
||||
@@ -91,31 +90,22 @@ var/list/blob_nodes = list()
|
||||
|
||||
/datum/game_mode/blob/announce()
|
||||
to_chat(world, "<B>The current game mode is - <font color='green'>Blob</font>!</B>")
|
||||
|
||||
to_chat(world, "<B>A dangerous alien organism is rapidly spreading throughout the station!</B>")
|
||||
|
||||
to_chat(world, "You must kill it all while minimizing the damage to the station.")
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/blob/proc/greet_blob(var/datum/mind/blob)
|
||||
to_chat(blob.current, "<span class='userdanger'>You are infected by the Blob!</span>")
|
||||
|
||||
to_chat(blob.current, "<b>Your body is ready to give spawn to a new blob core which will eat this station.</b>")
|
||||
|
||||
to_chat(blob.current, "<b>Find a good location to spawn the core and then take control and overwhelm the station!</b>")
|
||||
|
||||
to_chat(blob.current, "<b>When you have found a location, wait until you spawn; this will happen automatically and you cannot speed up the process.</b>")
|
||||
|
||||
to_chat(blob.current, "<b>If you go outside of the station level, or in space, then you will die; make sure your location has lots of ground to cover.</b>")
|
||||
|
||||
return
|
||||
|
||||
/datum/game_mode/blob/proc/show_message(var/message)
|
||||
for(var/datum/mind/blob in infected_crew)
|
||||
to_chat(blob.current, message)
|
||||
|
||||
|
||||
/datum/game_mode/blob/proc/burst_blobs()
|
||||
for(var/datum/mind/blob in infected_crew)
|
||||
burst_blob(blob)
|
||||
@@ -132,7 +122,6 @@ var/list/blob_nodes = list()
|
||||
if(location.z != ZLEVEL_STATION || istype(location, /turf/space))
|
||||
if(!warned)
|
||||
to_chat(C, "<span class='userdanger'>You feel ready to burst, but this isn't an appropriate place! You must return to the station!</span>")
|
||||
|
||||
message_admins("[key_name_admin(C)] was in space when the blobs burst, and will die if he doesn't return to the station.")
|
||||
spawn(300)
|
||||
burst_blob(blob, 1)
|
||||
|
||||
@@ -12,28 +12,21 @@
|
||||
if(blobwincount <= blobs.len)
|
||||
feedback_set_details("round_end_result","win - blob took over")
|
||||
to_chat(world, "<FONT size = 3><B>The blob has taken over the station!</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>The entire station was eaten by the Blob</B>")
|
||||
|
||||
log_game("Blob mode completed with a blob victory.")
|
||||
|
||||
else if(station_was_nuked)
|
||||
feedback_set_details("round_end_result","halfwin - nuke")
|
||||
to_chat(world, "<FONT size = 3><B>Partial Win: The station has been destroyed!</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>Directive 7-12 has been successfully carried out preventing the Blob from spreading.</B>")
|
||||
|
||||
log_game("Blob mode completed with a tie (station destroyed).")
|
||||
|
||||
else if(!blob_cores.len)
|
||||
feedback_set_details("round_end_result","loss - blob eliminated")
|
||||
to_chat(world, "<FONT size = 3><B>The staff has won!</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>The alien organism has been eradicated from the station</B>")
|
||||
|
||||
log_game("Blob mode completed with a crew victory.")
|
||||
to_chat(world, "<span class='notice'>Rebooting in 30s</span>")
|
||||
|
||||
..()
|
||||
return 1
|
||||
|
||||
@@ -46,5 +39,4 @@
|
||||
for(var/datum/mind/blob in blob_mode.infected_crew)
|
||||
text += "<br><b>[blob.key]</b> was <b>[blob.name]</b>"
|
||||
to_chat(world, text)
|
||||
|
||||
return 1
|
||||
|
||||
@@ -41,7 +41,6 @@
|
||||
aiPlayer.set_zeroth_law(law)
|
||||
to_chat(aiPlayer, "Laws Updated: [law]")
|
||||
|
||||
|
||||
for(var/obj/machinery/computer/communications/comm in world)
|
||||
comm.messagetitle.Add(interceptname)
|
||||
comm.messagetext.Add(intercepttext)
|
||||
|
||||
@@ -53,23 +53,14 @@
|
||||
..()
|
||||
sync_mind()
|
||||
to_chat(src, "<span class='notice'>You are the overmind!</span>")
|
||||
|
||||
to_chat(src, "Your randomly chosen reagent is: <b>[blob_reagent_datum.name]</b>!")
|
||||
|
||||
to_chat(src, "You are the overmind and can control the blob! You can expand, which will attack people, and place new blob pieces such as...")
|
||||
|
||||
to_chat(src, "<b>Normal Blob</b> will expand your reach and allow you to upgrade into special blobs that perform certain functions.")
|
||||
|
||||
to_chat(src, "<b>Shield Blob</b> is a strong and expensive blob which can take more damage. It is fireproof and can block air, use this to protect yourself from station fires.")
|
||||
|
||||
to_chat(src, "<b>Resource Blob</b> is a blob which will collect more resources for you, try to build these earlier to get a strong income. It will benefit from being near your core or multiple nodes, by having an increased resource rate; put it alone and it won't create resources at all.")
|
||||
|
||||
to_chat(src, "<b>Node Blob</b> is a blob which will grow, like the core. Unlike the core it won't give you a small income but it can power resource and factory blobs to increase their rate.")
|
||||
|
||||
to_chat(src, "<b>Factory Blob</b> is a blob which will spawn blob spores which will attack nearby food. Putting this nearby nodes and your core will increase the spawn rate; put it alone and it will not spawn any spores.")
|
||||
|
||||
to_chat(src, "<b>Shortcuts:</b> CTRL Click = Expand Blob / Middle Mouse Click = Rally Spores / Alt Click = Create Shield")
|
||||
|
||||
update_health()
|
||||
|
||||
/mob/camera/blob/proc/update_health()
|
||||
@@ -88,7 +79,6 @@
|
||||
if (src.client)
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
to_chat(src, "You cannot send IC messages (muted).")
|
||||
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
/mob/camera/blob/proc/can_buy(var/cost = 15)
|
||||
if(blob_points < cost)
|
||||
to_chat(src, "<span class='warning'>You cannot afford this!</span>")
|
||||
|
||||
return 0
|
||||
add_points(-cost)
|
||||
return 1
|
||||
@@ -46,12 +45,10 @@
|
||||
|
||||
if(!B)//We are on a blob
|
||||
to_chat(src, "There is no blob here!")
|
||||
|
||||
return
|
||||
|
||||
if(!istype(B, /obj/effect/blob/normal))
|
||||
to_chat(src, "Unable to use this blob, find a normal one.")
|
||||
|
||||
return
|
||||
|
||||
if(!can_buy(10))
|
||||
@@ -79,17 +76,14 @@
|
||||
|
||||
if(!B)//We are on a blob
|
||||
to_chat(src, "There is no blob here!")
|
||||
|
||||
return
|
||||
|
||||
if(!istype(B, /obj/effect/blob/normal))
|
||||
to_chat(src, "Unable to use this blob, find a normal one.")
|
||||
|
||||
return
|
||||
|
||||
for(var/obj/effect/blob/resource/blob in orange(4, T))
|
||||
to_chat(src, "There is a resource blob nearby, move more than 4 tiles away from it!")
|
||||
|
||||
return
|
||||
|
||||
if(!can_buy(40))
|
||||
@@ -118,17 +112,14 @@
|
||||
|
||||
if(!B)//We are on a blob
|
||||
to_chat(src, "There is no blob here!")
|
||||
|
||||
return
|
||||
|
||||
if(!istype(B, /obj/effect/blob/normal))
|
||||
to_chat(src, "Unable to use this blob, find a normal one.")
|
||||
|
||||
return
|
||||
|
||||
for(var/obj/effect/blob/node/blob in orange(5, T))
|
||||
to_chat(src, "There is another node nearby, move more than 5 tiles away from it!")
|
||||
|
||||
return
|
||||
|
||||
if(!can_buy(60))
|
||||
@@ -156,17 +147,14 @@
|
||||
var/obj/effect/blob/B = locate(/obj/effect/blob) in T
|
||||
if(!B)
|
||||
to_chat(src, "You must be on a blob!")
|
||||
|
||||
return
|
||||
|
||||
if(!istype(B, /obj/effect/blob/normal))
|
||||
to_chat(src, "Unable to use this blob, find a normal one.")
|
||||
|
||||
return
|
||||
|
||||
for(var/obj/effect/blob/factory/blob in orange(7, T))
|
||||
to_chat(src, "There is a factory blob nearby, move more than 7 tiles away from it!")
|
||||
|
||||
return
|
||||
|
||||
if(!can_buy(60))
|
||||
@@ -193,12 +181,10 @@
|
||||
var/obj/effect/blob/B = locate(/obj/effect/blob) in T
|
||||
if(!B)
|
||||
to_chat(src, "You must be on a blob!")
|
||||
|
||||
return
|
||||
|
||||
if(!istype(B, /obj/effect/blob/factory))
|
||||
to_chat(src, "Unable to use this blob, find a factory blob.")
|
||||
|
||||
return
|
||||
|
||||
if(!can_buy(20))
|
||||
@@ -227,7 +213,6 @@
|
||||
var/obj/effect/blob/node/B = locate(/obj/effect/blob/node) in T
|
||||
if(!B)
|
||||
to_chat(src, "You must be on a blob node!")
|
||||
|
||||
return
|
||||
|
||||
if(!can_buy(80))
|
||||
@@ -252,12 +237,10 @@
|
||||
var/obj/effect/blob/B = locate(/obj/effect/blob) in T
|
||||
if(!B)
|
||||
to_chat(src, "You must be on a blob!")
|
||||
|
||||
return
|
||||
|
||||
if(istype(B, /obj/effect/blob/core))
|
||||
to_chat(src, "Unable to remove this blob.")
|
||||
|
||||
return
|
||||
|
||||
qdel(B)
|
||||
@@ -281,13 +264,11 @@
|
||||
var/obj/effect/blob/B = locate() in T
|
||||
if(B)
|
||||
to_chat(src, "There is a blob here!")
|
||||
|
||||
return
|
||||
|
||||
var/obj/effect/blob/OB = locate() in circlerange(T, 1)
|
||||
if(!OB)
|
||||
to_chat(src, "There is no blob adjacent to you.")
|
||||
|
||||
return
|
||||
|
||||
if(!can_buy(5))
|
||||
@@ -319,7 +300,6 @@
|
||||
|
||||
to_chat(src, "You rally your spores.")
|
||||
|
||||
|
||||
var/list/surrounding_turfs = block(locate(T.x - 1, T.y - 1, T.z), locate(T.x + 1, T.y + 1, T.z))
|
||||
if(!surrounding_turfs.len)
|
||||
return
|
||||
@@ -338,12 +318,10 @@
|
||||
|
||||
if(!blob_nodes || !blob_nodes.len)
|
||||
to_chat(src, "<span class='warning'>A node is required to birth your offspring...</span>")
|
||||
|
||||
return
|
||||
var/obj/effect/blob/node/N = locate(/obj/effect/blob) in blob_nodes
|
||||
if(!N)
|
||||
to_chat(src, "<span class='warning'>A node is required to birth your offspring...</span>")
|
||||
|
||||
return
|
||||
|
||||
if(!can_buy(100))
|
||||
@@ -369,7 +347,6 @@
|
||||
return
|
||||
else
|
||||
to_chat(usr, "You broadcast with your minions, <B>[speak_text]</B>")
|
||||
|
||||
for(var/mob/living/simple_animal/hostile/blob_minion in blob_mobs)
|
||||
blob_minion.say(speak_text)
|
||||
return
|
||||
@@ -389,17 +366,14 @@
|
||||
|
||||
if(!B)//We are on a blob
|
||||
to_chat(src, "There is no blob here!")
|
||||
|
||||
return
|
||||
|
||||
if(!istype(B, /obj/effect/blob/normal))
|
||||
to_chat(src, "Unable to use this blob, find a normal one.")
|
||||
|
||||
return
|
||||
|
||||
for(var/obj/effect/blob/storage/blob in orange(3, T))
|
||||
to_chat(src, "There is a storage blob nearby, move more than 4 tiles away from it!")
|
||||
|
||||
return
|
||||
|
||||
if(!can_buy(40))
|
||||
@@ -433,4 +407,3 @@
|
||||
BLO.adjustcolors(blob_reagent_datum.color)
|
||||
|
||||
to_chat(src, "Your reagent is now: <b>[blob_reagent_datum.name]</b>!")
|
||||
|
||||
|
||||
@@ -199,7 +199,6 @@
|
||||
to_chat(user, "It looks like it's of a [get_chem_name()] kind.")
|
||||
|
||||
|
||||
|
||||
/obj/effect/blob/proc/get_chem_name()
|
||||
for(var/mob/camera/blob/B in mob_list)
|
||||
if(lowertext(B.blob_reagent_datum.color) == lowertext(src.color)) // Goddamit why we use strings for these
|
||||
|
||||
@@ -19,10 +19,8 @@
|
||||
|
||||
/datum/game_mode/borer/announce()
|
||||
to_chat(world, "<B>The current game mode is - Cortical Borer!</B>")
|
||||
|
||||
to_chat(world, "<B>An unknown creature has infested the mind of a crew member. Find and destroy it by any means necessary.</B>")
|
||||
|
||||
|
||||
/datum/game_mode/borer/can_start()
|
||||
if(!..())
|
||||
return 0
|
||||
@@ -103,11 +101,9 @@
|
||||
if (you_are)
|
||||
to_chat(borer.current, "<B>\red You are a Cortical Borer!</B>")
|
||||
|
||||
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/objective in borer.objectives)
|
||||
to_chat(borer.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
|
||||
obj_count++
|
||||
return
|
||||
|
||||
@@ -130,19 +126,15 @@
|
||||
var/borerwin = 1
|
||||
if((borer.current) && istype(borer.current,/mob/living/simple_animal/borer))
|
||||
to_chat(world, "<B>The borer was [borer.current.key].</B>")
|
||||
|
||||
to_chat(world, "<B>The last host was [borer.current:host.key].</B>")
|
||||
|
||||
|
||||
var/count = 1
|
||||
for(var/datum/objective/objective in borer.objectives)
|
||||
if(objective.check_completion())
|
||||
to_chat(world, "<B>Objective #[count]</B>: [objective.explanation_text] \green <B>Success</B>")
|
||||
|
||||
feedback_add_details("borer_objective","[objective.type]|SUCCESS")
|
||||
else
|
||||
to_chat(world, "<B>Objective #[count]</B>: [objective.explanation_text] \red Failed")
|
||||
|
||||
feedback_add_details("borer_objective","[objective.type]|FAIL")
|
||||
borerwin = 0
|
||||
count++
|
||||
@@ -152,11 +144,9 @@
|
||||
|
||||
if(borerwin)
|
||||
to_chat(world, "<B>The borer was successful!<B>")
|
||||
|
||||
feedback_add_details("borer_success","SUCCESS")
|
||||
else
|
||||
to_chat(world, "<B>The borer has failed!<B>")
|
||||
|
||||
feedback_add_details("borer_success","FAIL")
|
||||
return 1
|
||||
|
||||
|
||||
@@ -39,10 +39,8 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
|
||||
/datum/game_mode/changeling/announce()
|
||||
to_chat(world, "<B>The current game mode is - Changeling!</B>")
|
||||
|
||||
to_chat(world, "<B>There are alien changelings on the station. Do not let the changelings succeed!</B>")
|
||||
|
||||
|
||||
/datum/game_mode/changeling/pre_setup()
|
||||
|
||||
if(config.protect_roles_from_antagonist)
|
||||
@@ -137,21 +135,16 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
/datum/game_mode/proc/greet_changeling(var/datum/mind/changeling, var/you_are=1)
|
||||
if (you_are)
|
||||
to_chat(changeling.current, "<B>\red You are a changeling!</B>")
|
||||
|
||||
to_chat(changeling.current, "<b>\red Use say \":g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them.</b>")
|
||||
|
||||
to_chat(changeling.current, "<B>You must complete the following tasks:</B>")
|
||||
|
||||
if (changeling.current.mind)
|
||||
if (changeling.current.mind.assigned_role == "Clown")
|
||||
to_chat(changeling.current, "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself.")
|
||||
|
||||
changeling.current.mutations.Remove(CLUMSY)
|
||||
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/objective in changeling.objectives)
|
||||
to_chat(changeling.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
|
||||
obj_count++
|
||||
return
|
||||
|
||||
@@ -165,12 +158,9 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
changeling_mind.special_role = null
|
||||
if(issilicon(changeling_mind))
|
||||
to_chat(changeling_mind.current, "<span class='userdanger'>You have been robotized!</span>")
|
||||
|
||||
to_chat(changeling_mind.current, "<span class='danger'>You must obey your silicon laws and master AI above all else. Your objectives will consider you to be dead.</span>")
|
||||
|
||||
else
|
||||
to_chat(changeling_mind.current, "<FONT color='red' size = 3><B>You lose your powers! You are no longer a changeling and are stuck in your current form!</B></FONT>")
|
||||
|
||||
update_change_icons_removed(changeling_mind)
|
||||
|
||||
/datum/game_mode/proc/update_change_icons_added(datum/mind/changeling)
|
||||
@@ -255,7 +245,6 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
to_chat(world, text)
|
||||
|
||||
|
||||
|
||||
return 1
|
||||
|
||||
/datum/changeling //stores changeling powers, changeling recharge thingie, changeling absorbed DNA and changeling ID (for changeling hivemind)
|
||||
@@ -312,43 +301,35 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
/datum/changeling/proc/can_absorb_dna(var/mob/living/carbon/user, var/mob/living/carbon/target)
|
||||
if(absorbed_dna[1] == user.dna)//If our current DNA is the stalest, we gotta ditch it.
|
||||
to_chat(user, "<span class='warning'>We have reached our capacity to store genetic information! We must transform before absorbing more.</span>")
|
||||
|
||||
return
|
||||
|
||||
if(!target || !target.dna)
|
||||
to_chat(user, "<span class='warning'>This creature does not have any DNA.</span>")
|
||||
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/T = target
|
||||
if(!istype(T) || issmall(T))
|
||||
to_chat(user, "<span class='warning'>[T] is not compatible with our biology.</span>")
|
||||
|
||||
return
|
||||
|
||||
if((NOCLONE || SKELETON || HUSK) in T.mutations)
|
||||
to_chat(user, "<span class='warning'>DNA of [target] is ruined beyond usability!</span>")
|
||||
|
||||
return
|
||||
|
||||
if(T.species.flags & NO_DNA)
|
||||
to_chat(user, "<span class='warning'>This creature does not have DNA!</span>")
|
||||
|
||||
return
|
||||
|
||||
if(T.species.flags & NO_SCAN)
|
||||
to_chat(user, "<span class='warning'>We do not know how to parse this creature's DNA!</span>")
|
||||
|
||||
return
|
||||
|
||||
if(T.species.flags & NO_BLOOD)
|
||||
to_chat(user, "<span class='warning'>We are not able to use the DNA of a creature without a circulatory system.</span>")
|
||||
|
||||
return
|
||||
|
||||
if(has_dna(target.dna))
|
||||
to_chat(user, "<span class='warning'>We already have this DNA in storage!</span>")
|
||||
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -54,28 +54,22 @@
|
||||
return 0
|
||||
if(req_human && (!ishuman(user) || issmall(user)))
|
||||
to_chat(user, "<span class='warning'>We cannot do that in this form!</span>")
|
||||
|
||||
return 0
|
||||
var/datum/changeling/c = user.mind.changeling
|
||||
if(c.chem_charges<chemical_cost)
|
||||
to_chat(user, "<span class='warning'>We require at least [chemical_cost] unit\s of chemicals to do that!</span>")
|
||||
|
||||
return 0
|
||||
if(c.absorbedcount<req_dna)
|
||||
to_chat(user, "<span class='warning'>We require at least [req_dna] sample\s of compatible DNA.</span>")
|
||||
|
||||
return 0
|
||||
if(req_stat < user.stat)
|
||||
to_chat(user, "<span class='warning'>We are incapacitated.</span>")
|
||||
|
||||
return 0
|
||||
if((user.status_flags & FAKEDEATH) && name!="Regenerate")
|
||||
to_chat(user, "<span class='warning'>We are incapacitated.</span>")
|
||||
|
||||
return 0
|
||||
if(c.geneticdamage > max_genetic_damage)
|
||||
to_chat(user, "<span class='warning'>Our genomes are still reassembling. We need time to recover first.</span>")
|
||||
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
@@ -308,32 +308,26 @@ var/list/sting_paths
|
||||
|
||||
if(thepower == null)
|
||||
to_chat(user, "This is awkward. Changeling power purchase failed, please report this bug to a coder!")
|
||||
|
||||
return
|
||||
|
||||
if(absorbedcount < thepower.req_dna)
|
||||
to_chat(user, "We lack the energy to evolve this ability!")
|
||||
|
||||
return
|
||||
|
||||
if(has_sting(thepower))
|
||||
to_chat(user, "We have already evolved this ability!")
|
||||
|
||||
return
|
||||
|
||||
if(thepower.dna_cost < 0)
|
||||
to_chat(user, "We cannot evolve this ability.")
|
||||
|
||||
return
|
||||
|
||||
if(geneticpoints < thepower.dna_cost)
|
||||
to_chat(user, "We have reached our capacity for abilities.")
|
||||
|
||||
return
|
||||
|
||||
if(user.status_flags & FAKEDEATH)//To avoid potential exploits by buying new powers while in stasis, which clears your verblist.
|
||||
to_chat(user, "We lack the energy to evolve new abilities right now.")
|
||||
|
||||
return
|
||||
|
||||
geneticpoints -= thepower.dna_cost
|
||||
@@ -344,18 +338,15 @@ var/list/sting_paths
|
||||
/datum/changeling/proc/lingRespec(var/mob/user)
|
||||
if(!ishuman(user) || issmall(user))
|
||||
to_chat(user, "<span class='danger'>We can't remove our evolutions in this form!</span>")
|
||||
|
||||
return
|
||||
if(canrespec)
|
||||
to_chat(user, "<span class='notice'>We have removed our evolutions from this form, and are now ready to readapt.</span>")
|
||||
|
||||
user.remove_changeling_powers(1)
|
||||
canrespec = 0
|
||||
user.make_changeling()
|
||||
return 1
|
||||
else
|
||||
to_chat(user, "<span class='danger'>You lack the power to readapt your evolutions!</span>")
|
||||
|
||||
return 0
|
||||
|
||||
/mob/proc/make_changeling()
|
||||
|
||||
@@ -13,17 +13,14 @@
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
if(changeling.isabsorbing)
|
||||
to_chat(user, "<span class='warning'>We are already absorbing!</span>")
|
||||
|
||||
return
|
||||
|
||||
var/obj/item/weapon/grab/G = user.get_active_hand()
|
||||
if(!istype(G))
|
||||
to_chat(user, "<span class='warning'>We must be grabbing a creature in our active hand to absorb them.</span>")
|
||||
|
||||
return
|
||||
if(G.state <= GRAB_NECK)
|
||||
to_chat(user, "<span class='warning'>We must have a tighter grip to absorb this creature.</span>")
|
||||
|
||||
return
|
||||
|
||||
var/mob/living/carbon/target = G.affecting
|
||||
@@ -40,31 +37,24 @@
|
||||
switch(stage)
|
||||
if(1)
|
||||
to_chat(user, "<span class='notice'>This creature is compatible. We must hold still...</span>")
|
||||
|
||||
if(2)
|
||||
to_chat(user, "<span class='notice'>We extend a proboscis.</span>")
|
||||
|
||||
user.visible_message("<span class='warning'>[user] extends a proboscis!</span>")
|
||||
if(3)
|
||||
to_chat(user, "<span class='notice'>We stab [target] with the proboscis.</span>")
|
||||
|
||||
user.visible_message("<span class='danger'>[user] stabs [target] with the proboscis!</span>")
|
||||
to_chat(target, "<span class='danger'>You feel a sharp stabbing pain!</span>")
|
||||
|
||||
target.take_overall_damage(40)
|
||||
feedback_add_details("changeling_powers","A[stage]")
|
||||
if(!do_mob(user, target, 150))
|
||||
to_chat(user, "<span class='warning'>Our absorption of [target] has been interrupted!</span>")
|
||||
|
||||
changeling.isabsorbing = 0
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>We have absorbed [target]!</span>")
|
||||
|
||||
user.visible_message("<span class='danger'>[user] sucks the fluids from [target]!</span>")
|
||||
to_chat(target, "<span class='danger'>You have been absorbed by the changeling!</span>")
|
||||
|
||||
|
||||
if(!changeling.has_dna(target.dna))
|
||||
changeling.absorb_dna(target, user)
|
||||
|
||||
|
||||
@@ -9,10 +9,8 @@
|
||||
|
||||
if(user.digitalcamo)
|
||||
to_chat(user, "<span class='notice'>We return to normal.</span>")
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='notice'>We distort our form to prevent AI-tracking.</span>")
|
||||
|
||||
user.digitalcamo = !user.digitalcamo
|
||||
|
||||
feedback_add_details("changeling_powers","CAM")
|
||||
|
||||
@@ -12,10 +12,8 @@
|
||||
|
||||
if(user.lying)
|
||||
to_chat(user, "<span class='notice'>We arise.</span>")
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Adrenaline rushes through us.</span>")
|
||||
|
||||
user.stat = 0
|
||||
user.SetParalysis(0)
|
||||
user.SetStunned(0)
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
|
||||
to_chat(user, "<span class='notice'>We begin our stasis, preparing energy to arise once more.</span>")
|
||||
|
||||
|
||||
user.status_flags |= FAKEDEATH //play dead
|
||||
user.update_canmove()
|
||||
|
||||
@@ -24,7 +23,6 @@
|
||||
spawn(800)
|
||||
if(user && user.mind && user.mind.changeling && user.mind.changeling.purchasedpowers)
|
||||
to_chat(user, "<span class='notice'>We are ready to regenerate.</span>")
|
||||
|
||||
user.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/revive(null)
|
||||
|
||||
feedback_add_details("changeling_powers","FD")
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
//Starts healing you every second for 10 seconds. Can be used whilst unconscious.
|
||||
/obj/effect/proc_holder/changeling/fleshmend/sting_action(var/mob/living/user)
|
||||
to_chat(user, "<span class='notice'>We begin to heal rapidly.</span>")
|
||||
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.restore_blood()
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
explosion(get_turf(user),0,0,2,0,silent=1)
|
||||
for(var/mob/living/carbon/human/H in range(2,user))
|
||||
to_chat(H, "<span class='userdanger'>You are blinded by a shower of blood!</span>")
|
||||
|
||||
H.Stun(1)
|
||||
H.eye_blurry = max(20, H.eye_blurry)
|
||||
var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
|
||||
@@ -25,7 +24,6 @@
|
||||
H.confused += 3
|
||||
for(var/mob/living/silicon/S in range(2,user))
|
||||
to_chat(S, "<span class='userdanger'>Your sensors are disabled by a shower of blood!</span>")
|
||||
|
||||
S.Weaken(3)
|
||||
var/turf = get_turf(user)
|
||||
spawn(5) // So it's not killed in explosion
|
||||
@@ -37,7 +35,6 @@
|
||||
crab.origin.active = 1
|
||||
crab.origin.transfer_to(crab)
|
||||
to_chat(crab, "<span class='warning'>You burst out of the remains of your former body in a shower of gore!</span>")
|
||||
|
||||
user.gib()
|
||||
feedback_add_details("changeling_powers","LR")
|
||||
return 1
|
||||
@@ -11,7 +11,6 @@
|
||||
var/datum/changeling/changeling=user.mind.changeling
|
||||
changeling.changeling_speak = 1
|
||||
to_chat(user, "<i><font color=#800080>Use say \":g message\" to communicate with the other changelings.</font></i>")
|
||||
|
||||
var/obj/effect/proc_holder/changeling/hivemind_upload/S1 = new
|
||||
if(!changeling.has_sting(S1))
|
||||
changeling.purchasedpowers+=S1
|
||||
@@ -38,7 +37,6 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
|
||||
if(names.len <= 0)
|
||||
to_chat(user, "<span class='notice'>The airwaves already have all of our DNA.</span>")
|
||||
|
||||
return
|
||||
|
||||
var/chosen_name = input("Select a DNA to channel: ", "Channel DNA", null) as null|anything in names
|
||||
@@ -51,7 +49,6 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
|
||||
hivemind_bank += chosen_dna
|
||||
to_chat(user, "<span class='notice'>We channel the DNA of [chosen_name] to the air.</span>")
|
||||
|
||||
feedback_add_details("changeling_powers","HU")
|
||||
return 1
|
||||
|
||||
@@ -67,7 +64,6 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
if(changeling.absorbed_dna[1] == user.dna)//If our current DNA is the stalest, we gotta ditch it.
|
||||
to_chat(user, "<span class='warning'>We have reached our capacity to store genetic information! We must transform before absorbing more.</span>")
|
||||
|
||||
return
|
||||
return 1
|
||||
|
||||
@@ -80,7 +76,6 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
|
||||
if(names.len <= 0)
|
||||
to_chat(user, "<span class='notice'>There's no new DNA to absorb from the air.</span>")
|
||||
|
||||
return
|
||||
|
||||
var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in names
|
||||
@@ -93,6 +88,5 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
changeling.absorbed_dna.Cut(1,2)
|
||||
changeling.store_dna(chosen_dna, user)
|
||||
to_chat(user, "<span class='notice'>We absorb the DNA of [S] from the air.</span>")
|
||||
|
||||
feedback_add_details("changeling_powers","HD")
|
||||
return 1
|
||||
@@ -24,7 +24,6 @@
|
||||
if(!user)
|
||||
return 0
|
||||
to_chat(user, "<span class='notice'>We transform our appearance.</span>")
|
||||
|
||||
user.dna.SetSEState(MONKEYBLOCK,0)
|
||||
domutcheck(user, null) // Do a pre-mutcheck to cleanly switch from monkey form.
|
||||
user.dna = chosen_dna
|
||||
|
||||
@@ -13,20 +13,17 @@
|
||||
return 0
|
||||
if(user.has_brain_worms())
|
||||
to_chat(user, "<span class='warning'>We cannot perform this ability at the present time!</span>")
|
||||
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
if(!istype(H) || !H.species.primitive_form)
|
||||
to_chat(src, "<span class='warning'>We cannot perform this ability in this form!</span>")
|
||||
|
||||
return
|
||||
|
||||
H.visible_message("<span class='warning'>[H] transforms!</span>")
|
||||
changeling.geneticdamage = 30
|
||||
to_chat(H, "<span class='warning'>Our genes cry out!</span>")
|
||||
|
||||
var/list/implants = list() //Try to preserve implants.
|
||||
for(var/obj/item/weapon/implant/W in H)
|
||||
implants += W
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
changeling.mimicing = ""
|
||||
changeling.chem_recharge_slowdown -= 0.5
|
||||
to_chat(user, "<span class='notice'>We return our vocal glands to their original position.</span>")
|
||||
|
||||
return
|
||||
|
||||
var/mimic_voice = stripped_input(user, "Enter a name to mimic.", "Mimic Voice", null, MAX_NAME_LEN)
|
||||
@@ -24,8 +23,6 @@
|
||||
changeling.mimicing = mimic_voice
|
||||
changeling.chem_recharge_slowdown += 0.5
|
||||
to_chat(user, "<span class='notice'>We shape our glands to take the voice of <b>[mimic_voice]</b>, this will stop us from regenerating chemicals while active.</span>")
|
||||
|
||||
to_chat(user, "<span class='notice'>Use this power again to return to our original voice and reproduce chemicals again.</span>")
|
||||
|
||||
|
||||
feedback_add_details("changeling_powers","MV")
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
/obj/effect/proc_holder/changeling/weapon/sting_action(var/mob/user)
|
||||
if(!user.drop_item())
|
||||
to_chat(user, "The [user.get_active_hand()] is stuck to your hand, you cannot grow a [weapon_name_simple] over it!")
|
||||
|
||||
return
|
||||
var/obj/item/W = new weapon_type(user)
|
||||
user.put_in_hands(W)
|
||||
@@ -87,11 +86,9 @@
|
||||
/obj/effect/proc_holder/changeling/suit/sting_action(var/mob/living/carbon/human/user)
|
||||
if(!user.unEquip(user.wear_suit))
|
||||
to_chat(user, "\the [user.wear_suit] is stuck to your body, you cannot grow a [suit_name_simple] over it!")
|
||||
|
||||
return
|
||||
if(!user.unEquip(user.head))
|
||||
to_chat(user, "\the [user.head] is stuck on your head, you cannot grow a [helmet_name_simple] over it!")
|
||||
|
||||
return
|
||||
|
||||
user.unEquip(user.head)
|
||||
@@ -164,12 +161,10 @@
|
||||
|
||||
if(A.arePowerSystemsOn())
|
||||
to_chat(user, "<span class='notice'>The airlock's motors resist our efforts to force it.</span>")
|
||||
|
||||
return
|
||||
|
||||
else if(A.locked)
|
||||
to_chat(user, "<span class='notice'>The airlock's bolts prevent it from being forced.</span>")
|
||||
|
||||
return
|
||||
|
||||
else
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
|
||||
to_chat(user, "<span class='notice'>We cleanse impurities from our form.</span>")
|
||||
|
||||
|
||||
var/obj/item/organ/internal/body_egg/egg = user.get_int_organ(/obj/item/organ/internal/body_egg)
|
||||
if(egg)
|
||||
egg.remove(user)
|
||||
|
||||
@@ -63,7 +63,6 @@
|
||||
H.updatehealth()
|
||||
to_chat(user, "<span class='notice'>We have regenerated.</span>")
|
||||
|
||||
|
||||
user.regenerate_icons()
|
||||
|
||||
user.status_flags &= ~(FAKEDEATH)
|
||||
|
||||
@@ -18,10 +18,8 @@
|
||||
else
|
||||
to_chat(M, sound('sound/effects/screech.ogg'))
|
||||
|
||||
|
||||
if(issilicon(M))
|
||||
to_chat(M, sound('sound/weapons/flash.ogg'))
|
||||
|
||||
M.Weaken(rand(5,10))
|
||||
|
||||
for(var/obj/machinery/light/L in range(4, user))
|
||||
|
||||
@@ -15,14 +15,11 @@
|
||||
active = !active
|
||||
if(active)
|
||||
to_chat(user, "<span class='notice'>Our muscles tense and strengthen.</span>")
|
||||
|
||||
else
|
||||
user.status_flags &= ~GOTTAGOFAST
|
||||
to_chat(user, "<span class='notice'>Our muscles relax.</span>")
|
||||
|
||||
if(stacks >= 10)
|
||||
to_chat(user, "<span class='danger'>We collapse in exhaustion.</span>")
|
||||
|
||||
user.Weaken(3)
|
||||
user.emote("gasp")
|
||||
|
||||
@@ -31,7 +28,6 @@
|
||||
if(user.stat || user.staminaloss >= 90)
|
||||
active = 0 //Let's use something exact instead of !active where we can.
|
||||
to_chat(user, "<span class='notice'>Our muscles relax without the energy to strengthen them.</span>")
|
||||
|
||||
user.status_flags &= ~GOTTAGOFAST
|
||||
user.Weaken(2)
|
||||
user.emote("gasp")
|
||||
@@ -44,7 +40,6 @@
|
||||
if(stacks == 11) //Warning message that the stacks are getting too high
|
||||
to_chat(user, "<span class='warning'>Our legs are really starting to hurt...</span>")
|
||||
|
||||
|
||||
sleep(40)
|
||||
|
||||
while(!active) //Damage stacks decrease fairly rapidly while not in sanic mode
|
||||
|
||||
@@ -12,16 +12,13 @@
|
||||
var/obj/item/weapon/grab/G = user.get_active_hand()
|
||||
if(!istype(G) || (G.state < GRAB_AGGRESSIVE))
|
||||
to_chat(user, "<span class='warning'>We must have an aggressive grab on creature in our active hand to do this!</span>")
|
||||
|
||||
return
|
||||
var/mob/living/carbon/human/target = G.affecting
|
||||
if((NOCLONE || SKELETON || HUSK) in target.mutations)
|
||||
to_chat(user, "<span class='warning'>DNA of [target] is ruined beyond usability!</span>")
|
||||
|
||||
return
|
||||
if(!istype(target) || issmall(target) || target.species.flags & NO_DNA || target.species.flags & NO_SCAN || target.species.flags & NO_BLOOD)
|
||||
to_chat(user, "<span class='warning'>[target] is not compatible with this ability.</span>")
|
||||
|
||||
return
|
||||
return 1
|
||||
|
||||
@@ -32,18 +29,15 @@
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
|
||||
to_chat(user, "<span class='notice'>We tighen our grip. We must hold still....</span>")
|
||||
|
||||
target.do_jitter_animation(500)
|
||||
user.do_jitter_animation(500)
|
||||
|
||||
if(!do_mob(user,target,20))
|
||||
to_chat(user, "<span class='warning'>The body swap has been interrupted!</span>")
|
||||
|
||||
return
|
||||
|
||||
to_chat(target, "<span class='userdanger'>[user] tightens their grip as a painful sensation invades your body.</span>")
|
||||
|
||||
|
||||
if(!changeling.has_dna(target.dna))
|
||||
changeling.absorb_dna(target, user)
|
||||
changeling.protected_dna -= user.dna
|
||||
@@ -59,4 +53,3 @@
|
||||
user.remove_language("Changeling")
|
||||
target.add_language("Changeling")
|
||||
to_chat(target, "<span class='warning'>Our genes cry out as we swap our [user] form for [target].</span>")
|
||||
|
||||
|
||||
@@ -15,14 +15,12 @@
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/proc/set_sting(var/mob/user)
|
||||
to_chat(user, "<span class='notice'>We prepare our sting, use alt+click or middle mouse button on target to sting them.</span>")
|
||||
|
||||
user.mind.changeling.chosen_sting = src
|
||||
user.hud_used.lingstingdisplay.icon_state = sting_icon
|
||||
user.hud_used.lingstingdisplay.invisibility = 0
|
||||
|
||||
/obj/effect/proc_holder/changeling/sting/proc/unset_sting(var/mob/user)
|
||||
to_chat(user, "<span class='warning'>We retract our sting, we can't sting anyone for now.</span>")
|
||||
|
||||
user.mind.changeling.chosen_sting = null
|
||||
user.hud_used.lingstingdisplay.icon_state = null
|
||||
user.hud_used.lingstingdisplay.invisibility = 101
|
||||
@@ -36,14 +34,12 @@
|
||||
return
|
||||
if(!user.mind.changeling.chosen_sting)
|
||||
to_chat(user, "We haven't prepared our sting yet!")
|
||||
|
||||
if(!iscarbon(target))
|
||||
return
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(H.isSynthetic())
|
||||
to_chat(user, "<span class='warning'>This won't work on synthetics.</span>")
|
||||
|
||||
return
|
||||
if(!isturf(user.loc))
|
||||
return
|
||||
@@ -59,10 +55,8 @@
|
||||
if(!target)
|
||||
return
|
||||
to_chat(user, "<span class='notice'>We stealthily sting [target.name].</span>")
|
||||
|
||||
if(target.mind && target.mind.changeling)
|
||||
to_chat(target, "<span class='warning'>You feel a tiny prick.</span>")
|
||||
|
||||
add_logs(target, user, "unsuccessfully stung")
|
||||
return 1
|
||||
|
||||
@@ -92,17 +86,14 @@
|
||||
return
|
||||
if((HUSK in target.mutations) || (!ishuman(target)))
|
||||
to_chat(user, "<span class='warning'>Our sting appears ineffective against its DNA.</span>")
|
||||
|
||||
return 0
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(H.species.flags & NO_SCAN) //Prevents transforming slimes and killing them instantly
|
||||
to_chat(user, "<span class='warning'>This won't work on a creature with abnormal genetic material.</span>")
|
||||
|
||||
return 0
|
||||
if(H.species.flags & NO_BLOOD)
|
||||
to_chat(user, "<span class='warning'>This won't work on a creature without a circulatory system.</span>")
|
||||
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -112,7 +103,6 @@
|
||||
if(issmall(target))
|
||||
to_chat(user, "<span class='notice'>Our genes cry out as we sting [target.name]!</span>")
|
||||
|
||||
|
||||
if(iscarbon(target) && (target.status_flags & CANWEAKEN))
|
||||
var/mob/living/carbon/C = target
|
||||
C.do_jitter_animation(500)
|
||||
@@ -174,7 +164,6 @@ obj/effect/proc_holder/changeling/sting/blind
|
||||
/obj/effect/proc_holder/changeling/sting/blind/sting_action(var/mob/user, var/mob/target)
|
||||
add_logs(target, user, "stung", object="blind sting")
|
||||
to_chat(target, "<span class='danger'>Your eyes burn horrifically!</span>")
|
||||
|
||||
target.disabilities |= NEARSIGHTED
|
||||
target.eye_blind = 20
|
||||
target.eye_blurry = 40
|
||||
|
||||
@@ -11,11 +11,9 @@
|
||||
|
||||
/datum/game_mode/traitor/changeling/announce()
|
||||
to_chat(world, "<B>The current game mode is - Traitor+Changeling!</B>")
|
||||
|
||||
to_chat(world, "<B>There is an alien creature on the station along with some syndicate operatives out for their own gain! Do not let the changeling and the traitors succeed!</B>")
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/traitor/changeling/pre_setup()
|
||||
if(config.protect_roles_from_antagonist)
|
||||
restricted_jobs += protected_jobs
|
||||
|
||||
@@ -55,11 +55,9 @@
|
||||
|
||||
/datum/game_mode/cult/announce()
|
||||
to_chat(world, "<B>The current game mode is - Cult!</B>")
|
||||
|
||||
to_chat(world, "<B>Some crewmembers are attempting to start a cult!<BR>\nCultists - complete your objectives. Convert crewmembers to your cause by using the convert rune. Remember - there is no you, there is only the cult.<BR>\nPersonnel - Do not let the cult succeed in its mission. Brainwashing them with the chaplain's bible reverts them to whatever CentComm-allowed faith they had.</B>")
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/cult/pre_setup()
|
||||
if(prob(50))
|
||||
objectives += "survive"
|
||||
@@ -101,7 +99,6 @@
|
||||
grant_runeword(cult_mind.current)
|
||||
update_cult_icons_added(cult_mind)
|
||||
to_chat(cult_mind.current, "\blue You are a member of the cult!")
|
||||
|
||||
memorize_cult_objectives(cult_mind)
|
||||
|
||||
..()
|
||||
@@ -121,10 +118,8 @@
|
||||
if("eldergod")
|
||||
explanation = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it."
|
||||
to_chat(cult_mind.current, "<B>Objective #[obj_count]</B>: [explanation]")
|
||||
|
||||
cult_mind.memory += "<B>Objective #[obj_count]</B>: [explanation]<BR>"
|
||||
to_chat(cult_mind.current, "The convert rune is join blood self")
|
||||
|
||||
cult_mind.memory += "The convert rune is join blood self<BR>"
|
||||
|
||||
|
||||
@@ -135,7 +130,6 @@
|
||||
if (mob.mind)
|
||||
if (mob.mind.assigned_role == "Clown")
|
||||
to_chat(mob, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.")
|
||||
|
||||
mob.mutations.Remove(CLUMSY)
|
||||
|
||||
add_cult_viewpoint(mob) // give them a viewpoint
|
||||
@@ -151,10 +145,8 @@
|
||||
var/where = mob.equip_in_one_of_slots(T, slots)
|
||||
if (!where)
|
||||
to_chat(mob, "Unfortunately, you weren't able to get a talisman. This is very bad and you should adminhelp immediately.")
|
||||
|
||||
else
|
||||
to_chat(mob, "You have a talisman in your [where], one that will help you start the cult on this station. Use it well and remember - there are others.")
|
||||
|
||||
mob.update_icons()
|
||||
return 1
|
||||
|
||||
@@ -174,7 +166,6 @@
|
||||
word=pick(allwords)
|
||||
var/wordexp = "[cultwords[word]] is [word]..."
|
||||
to_chat(cult_mob, "\red [pick("You remember something from the dark teachings of your master","You hear a dark voice on the wind","Black blood oozes into your vision and forms into symbols","You have a vision of a [pick("crow","raven","vulture","parrot")] it squawks","You catch a brief glimmer of the otherside")]... [wordexp]")
|
||||
|
||||
cult_mob.mind.store_memory("<B>You remember that</B> [wordexp]", 0, 0)
|
||||
|
||||
|
||||
@@ -209,7 +200,6 @@
|
||||
if(cult_mind in cult)
|
||||
cult -= cult_mind
|
||||
to_chat(cult_mind.current, "\red <FONT size = 3><B>An unfamiliar white light flashes through your mind, cleansing the taint of the dark-one and the memories of your time as his servant with it.</B></FONT>")
|
||||
|
||||
cult_mind.memory = ""
|
||||
cult_mind.special_role = null
|
||||
// remove the cult viewpoint object
|
||||
@@ -222,7 +212,6 @@
|
||||
to_chat(M, "<FONT size = 3>[cult_mind.current] looks like they just reverted to their old faith!</FONT>")
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/proc/add_cult_icon_to_spirit(mob/spirit/currentSpirit)
|
||||
if(!istype(currentSpirit))
|
||||
return FALSE
|
||||
@@ -307,13 +296,11 @@
|
||||
feedback_set_details("round_end_result","win - cult win")
|
||||
feedback_set("round_end_result",acolytes_survived)
|
||||
to_chat(world, "\red <FONT size = 3><B> The cult wins! It has succeeded in serving its dark masters!</B></FONT>")
|
||||
|
||||
else
|
||||
feedback_set_details("round_end_result","loss - staff stopped the cult")
|
||||
feedback_set("round_end_result",acolytes_survived)
|
||||
to_chat(world, "\red <FONT size = 3><B> The staff managed to stop the cult!</B></FONT>")
|
||||
|
||||
|
||||
var/text = "<b>Cultists escaped:</b> [acolytes_survived]"
|
||||
|
||||
if(objectives.len)
|
||||
@@ -349,7 +336,6 @@
|
||||
text += "<br><B>Objective #[obj_count]</B>: [explanation]"
|
||||
|
||||
to_chat(world, text)
|
||||
|
||||
..()
|
||||
return 1
|
||||
|
||||
@@ -372,4 +358,3 @@
|
||||
text += ")"
|
||||
|
||||
to_chat(world, text)
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
else
|
||||
user.Paralyse(5)
|
||||
to_chat(user, "\red An unexplicable force powerfully repels the sword from [target]!")
|
||||
|
||||
var/organ = ((user.hand ? "l_":"r_") + "arm")
|
||||
var/obj/item/organ/external/affecting = user.get_organ(organ)
|
||||
if(affecting.take_damage(rand(force/2, force))) //random amount of damage between half of the blade's force and the full force of the blade.
|
||||
@@ -26,7 +25,6 @@
|
||||
/obj/item/weapon/melee/cultblade/pickup(mob/living/user as mob)
|
||||
if(!iscultist(user))
|
||||
to_chat(user, "\red An overwhelming feeling of dread comes over you as you pick up the cultist's sword. It would be wise to be rid of this blade quickly.")
|
||||
|
||||
user.Dizzy(120)
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
for (var/word in engwords)
|
||||
to_chat(usr, "[cultwords[word]] is [word]")
|
||||
|
||||
|
||||
/proc/runerandom() //randomizes word meaning
|
||||
var/list/runewords=list("ire","ego","nahlizet","certum","veri","jatkaa","mgar","balaq", "karazet", "geeri") ///"orkan" and "allaq" removed.
|
||||
for (var/word in engwords)
|
||||
@@ -83,25 +82,20 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
..(user)
|
||||
if(!iscultist(user) && !isSpirit(user))
|
||||
to_chat(user, "A strange collection of symbols drawn in blood.")
|
||||
|
||||
return
|
||||
if(!desc)
|
||||
to_chat(user, "A spell circle drawn in blood. It reads: <i>[word1] [word2] [word3]</i>.")
|
||||
|
||||
else
|
||||
to_chat(user, "Explosive Runes inscription in blood. It reads: <i>[desc]</i>.")
|
||||
|
||||
|
||||
|
||||
/obj/effect/rune/attackby(I as obj, user as mob, params)
|
||||
if(istype(I, /obj/item/weapon/tome) && iscultist(user))
|
||||
to_chat(user, "You retrace your steps, carefully undoing the lines of the rune.")
|
||||
|
||||
qdel(src)
|
||||
return
|
||||
else if(istype(I, /obj/item/weapon/nullrod))
|
||||
to_chat(user, "\blue You disrupt the vile magic with the deadening field of \the [I]!")
|
||||
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
@@ -145,15 +139,12 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
/obj/effect/rune/attack_hand(mob/living/user as mob)
|
||||
if(!iscultist(user))
|
||||
to_chat(user, "You can't mouth the arcane scratchings without fumbling over them.")
|
||||
|
||||
return
|
||||
if(istype(user.wear_mask, /obj/item/clothing/mask/muzzle))
|
||||
to_chat(user, "You are unable to speak the words of the rune.")
|
||||
|
||||
return
|
||||
if(user.silent) // checking if we've been muted somehow
|
||||
to_chat(user, "You are unable to speak at all! You cannot say the words of the rune.")
|
||||
|
||||
if(!word1 || !word2 || !word3 || prob(user.getBrainLoss()))
|
||||
return fizzle()
|
||||
|
||||
@@ -318,7 +309,6 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
|
||||
// proc/edit_notes() FUCK IT. Cant get it to work properly. - K0000
|
||||
// to_chat(world, "its been called! [usr]")
|
||||
|
||||
// notedat = {"
|
||||
// <br><b>Word translation notes</b> <br>
|
||||
// [words[1]] is <a href='byond://?src=\ref[src];number=1;action=change'>[words[words[1]]]</A> <A href='byond://?src=\ref[src];number=1;action=clear'>Clear</A><BR>
|
||||
@@ -333,7 +323,6 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
// [words[10]] is <a href='byond://?src=\ref[src];number=10;action=change'>[words[words[10]]]</A> <A href='byond://?src=\ref[src];number=10;action=clear'>Clear</A><BR>
|
||||
// "}
|
||||
// to_chat(usr, "whatev")
|
||||
|
||||
// usr << browse(null, "window=tank")
|
||||
|
||||
attack(mob/living/M as mob, mob/living/user as mob)
|
||||
@@ -359,7 +348,6 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
if(iscultist(M))
|
||||
if(M.reagents && M.reagents.has_reagent("holywater")) //allows cultists to be rescued from the clutches of ordained religion
|
||||
to_chat(user, "<span class='notice'>You remove the taint from [M].</span>")
|
||||
|
||||
var/holy2unholy = M.reagents.get_reagent_amount("holywater")
|
||||
M.reagents.del_reagent("holywater")
|
||||
M.reagents.add_reagent("unholywater",holy2unholy)
|
||||
@@ -371,7 +359,6 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
to_chat(M, "\red You feel searing heat inside!")
|
||||
|
||||
|
||||
|
||||
attack_self(mob/living/user as mob)
|
||||
usr = user
|
||||
if(!usr.canmove || usr.stat || usr.restrained())
|
||||
@@ -385,7 +372,6 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
C++
|
||||
if (!istype(user.loc,/turf))
|
||||
to_chat(user, "\red You do not have enough space to write a proper rune.")
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -473,7 +459,6 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
return
|
||||
if (chosen_rune == "none")
|
||||
to_chat(user, "\red You decide against scribing a rune, perhaps you should take this time to study your notes.")
|
||||
|
||||
return
|
||||
if (chosen_rune == "teleport")
|
||||
dictionary[chosen_rune] += input ("Choose a destination word") in english
|
||||
@@ -486,7 +471,6 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
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)
|
||||
to_chat(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.take_overall_damage((rand(9)+1)/10) // 0.1 to 1.0 damage
|
||||
if(do_after(user, 50, target = user))
|
||||
if(usr.get_active_hand() != src)
|
||||
@@ -494,7 +478,6 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/obj/effect/rune/R = new /obj/effect/rune(user.loc)
|
||||
to_chat(user, "\red You finish drawing the arcane markings of the Geometer.")
|
||||
|
||||
var/list/required = dictionary[chosen_rune]
|
||||
R.word1 = english[required[1]]
|
||||
R.word2 = english[required[2]]
|
||||
@@ -506,7 +489,6 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
return
|
||||
else
|
||||
to_chat(user, "The book seems full of illegible scribbles. Is this a joke?")
|
||||
|
||||
return
|
||||
|
||||
attackby(obj/item/weapon/tome/T as obj, mob/living/user as mob, params)
|
||||
@@ -524,15 +506,12 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
to_chat(user, "You copy the translation notes from your tome.")
|
||||
|
||||
|
||||
|
||||
examine(mob/user)
|
||||
if(!iscultist(user))
|
||||
to_chat(user, "An old, dusty tome with frayed edges and a sinister looking cover.")
|
||||
|
||||
else
|
||||
to_chat(user, "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/tome/imbued //admin tome, spawns working runes without waiting
|
||||
w_class = 2.0
|
||||
var/cultistsonly = 1
|
||||
@@ -545,7 +524,6 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
var/r
|
||||
if (!istype(user.loc,/turf))
|
||||
to_chat(user, "\red You do not have enough space to write a proper rune.")
|
||||
|
||||
var/list/runes = list("teleport", "itemport", "tome", "armor", "convert", "tear in reality", "emp", "drain", "seer", "raise", "obscure", "reveal", "astral journey", "manifest", "imbue talisman", "sacrifice", "wall", "freedom", "cultsummon", "deafen", "blind", "bloodboil", "communicate", "stun")
|
||||
r = input("Choose a rune to scribe", "Rune Scribing") in runes //not cancellable.
|
||||
var/obj/effect/rune/R = new /obj/effect/rune
|
||||
|
||||
@@ -20,7 +20,6 @@ var/list/sacrificed = list()
|
||||
allrunesloc[index] = R.loc
|
||||
if(index >= 5)
|
||||
to_chat(user, "\red You feel pain, as rune disappears in reality shift caused by too much wear of space-time fabric")
|
||||
|
||||
if (istype(user, /mob/living))
|
||||
user.take_overall_damage(5, 0)
|
||||
qdel(src)
|
||||
@@ -59,7 +58,6 @@ var/list/sacrificed = list()
|
||||
runecount++
|
||||
if(runecount >= 2)
|
||||
to_chat(user, "\red You feel pain, as rune disappears in reality shift caused by too much wear of space-time fabric")
|
||||
|
||||
if (istype(user, /mob/living))
|
||||
user.take_overall_damage(5, 0)
|
||||
qdel(src)
|
||||
@@ -117,15 +115,11 @@ var/list/sacrificed = list()
|
||||
ticker.mode.add_cultist(M.mind)
|
||||
M.mind.special_role = "Cultist"
|
||||
to_chat(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>")
|
||||
|
||||
to_chat(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 1
|
||||
else
|
||||
to_chat(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>")
|
||||
|
||||
to_chat(M, "<font color=\"red\"><b>And you were able to force it out of your mind. You now know the truth, there's something horrible out there, stop it and its minions at all costs.</b></font>")
|
||||
|
||||
return 0
|
||||
|
||||
return fizzle()
|
||||
@@ -178,7 +172,6 @@ var/list/sacrificed = list()
|
||||
cult_log("[key_name_admin(usr)] has drained blood from [key_name_admin(D)]")
|
||||
var/bdrain = rand(1,25)
|
||||
to_chat(D, "\red You feel weakened.")
|
||||
|
||||
D.take_overall_damage(bdrain, 0)
|
||||
drain += bdrain
|
||||
if(!drain)
|
||||
@@ -220,18 +213,15 @@ var/list/sacrificed = list()
|
||||
if(usr.seer==1)
|
||||
usr.say("Rash'tla sektath mal[pick("'","`")]zua. Zasan therium viortia.")
|
||||
to_chat(usr, "\red The world beyond fades from your vision.")
|
||||
|
||||
usr.see_invisible = SEE_INVISIBLE_LIVING
|
||||
usr.seer = 0
|
||||
else if(usr.see_invisible!=SEE_INVISIBLE_LIVING)
|
||||
to_chat(usr, "\red The world beyond flashes your eyes but disappears quickly, as if something is disrupting your vision.")
|
||||
|
||||
usr.see_invisible = SEE_INVISIBLE_OBSERVER
|
||||
usr.seer = 0
|
||||
else
|
||||
usr.say("Rash'tla sektath mal[pick("'","`")]zua. Zasan therium vivira. Itonis al'ra matum!")
|
||||
to_chat(usr, "\red The world beyond opens to your eyes.")
|
||||
|
||||
usr.see_invisible = SEE_INVISIBLE_OBSERVER
|
||||
usr.seer = 1
|
||||
return
|
||||
@@ -256,7 +246,6 @@ var/list/sacrificed = list()
|
||||
if(!corpse_to_raise)
|
||||
if(is_sacrifice_target)
|
||||
to_chat(usr, "\red The Geometer of blood wants this mortal for himself.")
|
||||
|
||||
return fizzle()
|
||||
|
||||
|
||||
@@ -275,10 +264,8 @@ var/list/sacrificed = list()
|
||||
if(!body_to_sacrifice)
|
||||
if (is_sacrifice_target)
|
||||
to_chat(usr, "\red The Geometer of blood wants that corpse for himself.")
|
||||
|
||||
else
|
||||
to_chat(usr, "\red The sacrifical corpse is not dead. You must free it from this world of illusions before it may be used.")
|
||||
|
||||
return fizzle()
|
||||
|
||||
var/mob/dead/observer/ghost
|
||||
@@ -290,7 +277,6 @@ var/list/sacrificed = list()
|
||||
|
||||
if(!ghost)
|
||||
to_chat(usr, "\red You require a restless spirit which clings to this world. Beckon their prescence with the sacred chants of Nar-Sie.")
|
||||
|
||||
return fizzle()
|
||||
|
||||
corpse_to_raise.revive()
|
||||
@@ -312,9 +298,7 @@ var/list/sacrificed = list()
|
||||
// ticker.mode.cult |= corpse_to_raise.mind
|
||||
|
||||
to_chat(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>")
|
||||
|
||||
to_chat(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
|
||||
|
||||
|
||||
@@ -340,7 +324,6 @@ var/list/sacrificed = list()
|
||||
else
|
||||
usr.whisper("Kla[pick("'","`")]atu barada nikt'o!")
|
||||
to_chat(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)
|
||||
@@ -419,10 +402,8 @@ var/list/sacrificed = list()
|
||||
|
||||
D.mind.special_role = "Cultist"
|
||||
to_chat(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>")
|
||||
|
||||
to_chat(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>")
|
||||
|
||||
|
||||
var/mob/living/user = usr
|
||||
while(this_rune && user && user.stat==CONSCIOUS && user.client && user.loc==this_rune.loc)
|
||||
user.take_organ_damage(1, 0)
|
||||
@@ -452,7 +433,6 @@ var/list/sacrificed = list()
|
||||
if (!newtalisman)
|
||||
if (unsuitable_newtalisman)
|
||||
to_chat(usr, "\red The blank is tainted. It is unsuitable.")
|
||||
|
||||
return fizzle()
|
||||
|
||||
var/obj/effect/rune/imbued_from
|
||||
@@ -561,7 +541,6 @@ var/list/sacrificed = list()
|
||||
return 0
|
||||
to_chat(F, "<small>[time2text(world.timeofday,"hh:mm")] \ref[usr] ([usr.x],[usr.y],[usr.z])</small> || [usr] communicates: [input]<br>")
|
||||
|
||||
|
||||
var/obj/cult_viewpoint/vp = getCultViewpoint(usr)
|
||||
if (!vp)
|
||||
return 0
|
||||
@@ -584,12 +563,10 @@ var/list/sacrificed = list()
|
||||
if (H.current)
|
||||
to_chat(H.current, "<span class='cultspeech'><span class='name'>[cultName]: </span><span class='message'>[input]</span></span>")
|
||||
|
||||
|
||||
for(var/mob/spirit/spirit in spirits)
|
||||
to_chat(spirit, "<span class='cultspeech'><span class='name'><a href='byond://?src=\ref[spirit];track2=\ref[spirit];track=\ref[usr]'>[displayName]: </a></span><span class='message'>[input]</span></span>")
|
||||
|
||||
|
||||
|
||||
for(var/mob/dead/observer/G in player_list)
|
||||
G.show_message("<span class='cultspeech'><span class='name'>[displayName] ([cultName]) ([ghost_follow_link(usr, ghost=G)]): </span><span class='message'>[input]</span></span>")
|
||||
|
||||
@@ -629,22 +606,17 @@ var/list/sacrificed = list()
|
||||
else
|
||||
H.gib()
|
||||
to_chat(usr, "\red The Geometer of Blood accepts this sacrifice, your objective is now complete.")
|
||||
|
||||
else
|
||||
to_chat(usr, "\red Your target's earthly bonds are too strong. You need more cultists to succeed in this ritual.")
|
||||
|
||||
else
|
||||
if(cultsinrange.len >= 3)
|
||||
if(H.stat !=2)
|
||||
if(prob(80))
|
||||
to_chat(usr, "\red The Geometer of Blood accepts this sacrifice.")
|
||||
|
||||
ticker.mode:grant_runeword(usr)
|
||||
else
|
||||
to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
|
||||
|
||||
to_chat(usr, "\red However, this soul was not enough to gain His favor.")
|
||||
|
||||
if(isrobot(H))
|
||||
H.dust()//To prevent the MMI from remaining
|
||||
else
|
||||
@@ -652,13 +624,10 @@ var/list/sacrificed = list()
|
||||
else
|
||||
if(prob(40))
|
||||
to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
|
||||
|
||||
ticker.mode:grant_runeword(usr)
|
||||
else
|
||||
to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
|
||||
|
||||
to_chat(usr, "\red However, a mere dead body is not enough to satisfy Him.")
|
||||
|
||||
if(isrobot(H))
|
||||
H.dust()//To prevent the MMI from remaining
|
||||
else
|
||||
@@ -666,17 +635,13 @@ var/list/sacrificed = list()
|
||||
else
|
||||
if(H.stat !=2)
|
||||
to_chat(usr, "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed.")
|
||||
|
||||
else
|
||||
if(prob(40))
|
||||
to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
|
||||
|
||||
ticker.mode:grant_runeword(usr)
|
||||
else
|
||||
to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
|
||||
|
||||
to_chat(usr, "\red However, a mere dead body is not enough to satisfy Him.")
|
||||
|
||||
if(isrobot(H))
|
||||
H.dust()//To prevent the MMI from remaining
|
||||
else
|
||||
@@ -686,13 +651,10 @@ var/list/sacrificed = list()
|
||||
if(H.stat !=2)
|
||||
if(prob(80))
|
||||
to_chat(usr, "\red The Geometer of Blood accepts this sacrifice.")
|
||||
|
||||
ticker.mode:grant_runeword(usr)
|
||||
else
|
||||
to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
|
||||
|
||||
to_chat(usr, "\red However, this soul was not enough to gain His favor.")
|
||||
|
||||
if(isrobot(H))
|
||||
H.dust()//To prevent the MMI from remaining
|
||||
else
|
||||
@@ -700,13 +662,10 @@ var/list/sacrificed = list()
|
||||
else
|
||||
if(prob(40))
|
||||
to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
|
||||
|
||||
ticker.mode:grant_runeword(usr)
|
||||
else
|
||||
to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
|
||||
|
||||
to_chat(usr, "\red However, a mere dead body is not enough to satisfy Him.")
|
||||
|
||||
if(isrobot(H))
|
||||
H.dust()//To prevent the MMI from remaining
|
||||
else
|
||||
@@ -714,17 +673,13 @@ var/list/sacrificed = list()
|
||||
else
|
||||
if(H.stat !=2)
|
||||
to_chat(usr, "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed.")
|
||||
|
||||
else
|
||||
if(prob(40))
|
||||
to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
|
||||
|
||||
ticker.mode:grant_runeword(usr)
|
||||
else
|
||||
to_chat(usr, "\red The Geometer of blood accepts this sacrifice.")
|
||||
|
||||
to_chat(usr, "\red However, a mere dead body is not enough to satisfy Him.")
|
||||
|
||||
if(isrobot(H))
|
||||
H.dust()//To prevent the MMI from remaining
|
||||
else
|
||||
@@ -756,7 +711,6 @@ var/list/sacrificed = list()
|
||||
if(S)
|
||||
if(istype(W,/obj/item/weapon/storage/bible))
|
||||
to_chat(usr, "\red Arcane markings suddenly glow from underneath a thin layer of dust!")
|
||||
|
||||
return
|
||||
if(istype(W,/obj/effect/rune))
|
||||
usr.say("Nikt[pick("'","`")]o barada kla'atu!")
|
||||
@@ -767,7 +721,6 @@ var/list/sacrificed = list()
|
||||
if(istype(W,/obj/item/weapon/paper/talisman))
|
||||
usr.whisper("Nikt[pick("'","`")]o barada kla'atu!")
|
||||
to_chat(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)
|
||||
@@ -788,10 +741,8 @@ var/list/sacrificed = list()
|
||||
user.take_organ_damage(2, 0)
|
||||
if(src.density)
|
||||
to_chat(usr, "\red Your blood flows into the rune, and you feel that the very space over the rune thickens.")
|
||||
|
||||
else
|
||||
to_chat(usr, "\red Your blood flows into the rune, and you feel as the rune releases its grasp on space.")
|
||||
|
||||
return
|
||||
|
||||
/////////////////////////////////////////EIGHTTEENTH RUNE
|
||||
@@ -820,7 +771,6 @@ var/list/sacrificed = list()
|
||||
(istype(cultist.loc, /obj/machinery/dna_scannernew)&&cultist.loc:locked) \
|
||||
))
|
||||
to_chat(user, "\red The [cultist] is already free.")
|
||||
|
||||
return
|
||||
cultist.buckled = null
|
||||
if (cultist.handcuffed)
|
||||
@@ -865,7 +815,6 @@ var/list/sacrificed = list()
|
||||
return
|
||||
if(cultist.buckled || cultist.handcuffed || (!isturf(cultist.loc) && !istype(cultist.loc, /obj/structure/closet)))
|
||||
to_chat(user, "\red You cannot summon the [cultist], for his shackles of blood are strong")
|
||||
|
||||
return fizzle()
|
||||
cultist.loc = src.loc
|
||||
cultist.lying = 1
|
||||
@@ -899,7 +848,6 @@ var/list/sacrificed = list()
|
||||
if(affected)
|
||||
usr.say("Sti[pick("'","`")] kaliedir!")
|
||||
to_chat(usr, "\red The world becomes quiet as the deafening rune dissipates into fine dust.")
|
||||
|
||||
qdel(src)
|
||||
else
|
||||
return fizzle()
|
||||
@@ -918,7 +866,6 @@ var/list/sacrificed = list()
|
||||
if(affected)
|
||||
usr.whisper("Sti[pick("'","`")] kaliedir!")
|
||||
to_chat(usr, "\red Your talisman turns into gray dust, deafening everyone around.")
|
||||
|
||||
for (var/mob/V in orange(1,src))
|
||||
if(!(iscultist(V)))
|
||||
V.show_message("\red Dust flows from [usr]'s hands for a moment, and the world suddenly becomes quiet..", 3)
|
||||
@@ -944,7 +891,6 @@ var/list/sacrificed = list()
|
||||
if(affected)
|
||||
usr.say("Sti[pick("'","`")] kaliesin!")
|
||||
to_chat(usr, "\red The rune flashes, blinding those who not follow the Nar-Sie, and dissipates into fine dust.")
|
||||
|
||||
qdel(src)
|
||||
else
|
||||
return fizzle()
|
||||
@@ -964,7 +910,6 @@ var/list/sacrificed = list()
|
||||
if(affected)
|
||||
usr.whisper("Sti[pick("'","`")] kaliesin!")
|
||||
to_chat(usr, "\red Your talisman turns into gray dust, blinding those who not follow the Nar-Sie.")
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -990,7 +935,6 @@ var/list/sacrificed = list()
|
||||
cult_log(": Blood Boil damaged [key_name_admin(M)].")
|
||||
M.take_overall_damage(51,51)
|
||||
to_chat(M, "\red Your blood boils!")
|
||||
|
||||
if(prob(5))
|
||||
spawn(5)
|
||||
M.gib()
|
||||
@@ -1020,10 +964,8 @@ var/list/sacrificed = list()
|
||||
M.take_overall_damage(0,15)
|
||||
if (R.invisibility>M.see_invisible)
|
||||
to_chat(M, "\red Aargh it burns!")
|
||||
|
||||
else
|
||||
to_chat(M, "\red Rune suddenly ignites, burning you!")
|
||||
|
||||
var/turf/T = get_turf(R)
|
||||
T.hotspot_expose(700,125)
|
||||
for(var/obj/effect/decal/cleanable/blood/B in world)
|
||||
@@ -1031,7 +973,6 @@ var/list/sacrificed = list()
|
||||
for(var/mob/living/M in orange(1,B))
|
||||
M.take_overall_damage(0,5)
|
||||
to_chat(M, "\red Blood suddenly ignites, burning you!")
|
||||
|
||||
var/turf/T = get_turf(B)
|
||||
T.hotspot_expose(700,125)
|
||||
qdel(B)
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
call(/obj/effect/rune/proc/blind)()
|
||||
if("runestun")
|
||||
to_chat(user, "\red To use this talisman, attack your target directly.")
|
||||
|
||||
return
|
||||
if("supply")
|
||||
supply()
|
||||
@@ -40,7 +39,6 @@
|
||||
return
|
||||
else
|
||||
to_chat(user, "You see strange symbols on the paper. Are they supposed to mean something?")
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -102,10 +100,8 @@
|
||||
var/where = M.equip_in_one_of_slots(T, slots)
|
||||
if (!where)
|
||||
to_chat(M, "You need a space in your backpack, pocket or hand for the new paper.")
|
||||
|
||||
else
|
||||
to_chat(M, "The [href_list["rune"]] talisman in your [where]")
|
||||
|
||||
M.update_icons()
|
||||
src.uses--
|
||||
supply()
|
||||
@@ -127,10 +123,8 @@
|
||||
var/where = M.equip_in_one_of_slots(T, slots)
|
||||
if (!where)
|
||||
to_chat(M, "You need a space in your backpack, pocket or hand for the new paper.")
|
||||
|
||||
else
|
||||
to_chat(M, "The [href_list["rune"]] talisman in your [where]")
|
||||
|
||||
M.update_icons()
|
||||
src.uses--
|
||||
supply()
|
||||
@@ -150,10 +144,8 @@
|
||||
var/where = M.equip_in_one_of_slots(T, slots)
|
||||
if (!where)
|
||||
to_chat(M, "You need a space in your backpack, pocket or hand for the new paper.")
|
||||
|
||||
else
|
||||
to_chat(M, "The [href_list["rune"]] talisman in your [where]")
|
||||
|
||||
M.update_icons()
|
||||
src.uses--
|
||||
supply()
|
||||
@@ -173,10 +165,8 @@
|
||||
var/where = M.equip_in_one_of_slots(T, slots)
|
||||
if (!where)
|
||||
to_chat(M, "You need a space in your backpack, pocket or hand for the new paper.")
|
||||
|
||||
else
|
||||
to_chat(M, "The [href_list["rune"]] talisman in your [where]")
|
||||
|
||||
M.update_icons()
|
||||
src.uses--
|
||||
supply()
|
||||
@@ -196,10 +186,8 @@
|
||||
var/where = M.equip_in_one_of_slots(T, slots)
|
||||
if (!where)
|
||||
to_chat(M, "You need a space in your backpack, pocket or hand for the new paper.")
|
||||
|
||||
else
|
||||
to_chat(M, "The [href_list["rune"]] talisman in your [where]")
|
||||
|
||||
M.update_icons()
|
||||
src.uses--
|
||||
supply()
|
||||
@@ -219,10 +207,8 @@
|
||||
var/where = M.equip_in_one_of_slots(T, slots)
|
||||
if (!where)
|
||||
to_chat(M, "You need a space in your backpack, pocket or hand for the new paper.")
|
||||
|
||||
else
|
||||
to_chat(M, "The [href_list["rune"]] talisman in your [where]")
|
||||
|
||||
M.update_icons()
|
||||
src.uses--
|
||||
supply()
|
||||
@@ -242,10 +228,8 @@
|
||||
var/where = M.equip_in_one_of_slots(T, slots)
|
||||
if (!where)
|
||||
to_chat(M, "You need a space in your backpack, pocket or hand for the new paper.")
|
||||
|
||||
else
|
||||
to_chat(M, "The [href_list["rune"]] talisman in your [where]")
|
||||
|
||||
M.update_icons()
|
||||
src.uses--
|
||||
supply()
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
for(var/mob/M in player_list)
|
||||
to_chat(M, sound('sound/AI/aliens.ogg'))
|
||||
|
||||
|
||||
/proc/lightsout(isEvent = 0, lightsoutAmount = 1,lightsoutRange = 25) //leave lightsoutAmount as 0 to break ALL lights
|
||||
if(isEvent)
|
||||
command_announcement.Announce("An Electrical storm has been detected in your area, please repair potential electronic overloads.","Electrical Storm Alert")
|
||||
|
||||
@@ -8,10 +8,8 @@
|
||||
|
||||
/datum/game_mode/announce()
|
||||
to_chat(world, "<B>The current game mode is - Extended Role-Playing!</B>")
|
||||
|
||||
to_chat(world, "<B>Just have fun and role-play!</B>")
|
||||
|
||||
|
||||
/datum/game_mode/extended/pre_setup()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -41,7 +41,6 @@
|
||||
to_chat(world, "<B>Notice</B>: [src] did not define announce()")
|
||||
|
||||
|
||||
|
||||
///can_start()
|
||||
///Checks to see if the game can be setup and ran with the current number of players or whatnot.
|
||||
/datum/game_mode/proc/can_start()
|
||||
@@ -397,7 +396,6 @@ proc/display_roundstart_logout_report()
|
||||
to_chat(M, msg)
|
||||
|
||||
|
||||
|
||||
proc/get_nt_opposed()
|
||||
var/list/dudes = list()
|
||||
for(var/mob/living/carbon/human/man in player_list)
|
||||
@@ -424,10 +422,8 @@ proc/get_nt_opposed()
|
||||
|
||||
var/obj_count = 1
|
||||
to_chat(player.current, "\blue Your current objectives:")
|
||||
|
||||
for(var/datum/objective/objective in player.objectives)
|
||||
to_chat(player.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
|
||||
obj_count++
|
||||
|
||||
/proc/get_roletext(var/role)
|
||||
@@ -446,11 +442,9 @@ proc/get_nt_opposed()
|
||||
if(candidates.len)
|
||||
theghost = pick(candidates)
|
||||
to_chat(M, "<span class='userdanger'>Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!</span>")
|
||||
|
||||
message_admins("[key_name_admin(theghost)] has taken control of ([key_name_admin(M)]) to replace a jobbanned player.")
|
||||
M.ghostize()
|
||||
M.key = theghost.key
|
||||
else
|
||||
message_admins("[M] ([M.key] has been converted into [role_type] with an active antagonist jobban for said role since no ghost has volunteered to take their place.")
|
||||
to_chat(M, "<span class='biggerdanger'>You have been converted into [role_type] with an active jobban. Any further violations of the rules on your part are likely to result in a permanent ban.</span>")
|
||||
|
||||
|
||||
@@ -44,9 +44,7 @@ var/round_start_time = 0
|
||||
do
|
||||
pregame_timeleft = 180
|
||||
to_chat(world, "<B><FONT color='blue'>Welcome to the pre-game lobby!</FONT></B>")
|
||||
|
||||
to_chat(world, "Please, setup your character and select ready. Game will start in [pregame_timeleft] seconds")
|
||||
|
||||
while(current_state == GAME_STATE_PREGAME)
|
||||
for(var/i=0, i<10, i++)
|
||||
sleep(1)
|
||||
@@ -79,7 +77,6 @@ var/round_start_time = 0
|
||||
if (runnable_modes.len==0)
|
||||
current_state = GAME_STATE_PREGAME
|
||||
to_chat(world, "<B>Unable to choose playable game mode.</B> Reverting to pre-game lobby.")
|
||||
|
||||
return 0
|
||||
if(secret_force_mode != "secret")
|
||||
var/datum/game_mode/M = config.pick_mode(secret_force_mode)
|
||||
@@ -95,7 +92,6 @@ var/round_start_time = 0
|
||||
src.mode = config.pick_mode(master_mode)
|
||||
if (!src.mode.can_start())
|
||||
to_chat(world, "<B>Unable to start [mode.name].</B> Not enough players, [mode.required_players] players needed. Reverting to pre-game lobby.")
|
||||
|
||||
mode = null
|
||||
current_state = GAME_STATE_PREGAME
|
||||
job_master.ResetOccupations()
|
||||
@@ -110,7 +106,6 @@ var/round_start_time = 0
|
||||
qdel(mode)
|
||||
current_state = GAME_STATE_PREGAME
|
||||
to_chat(world, "<B>Error setting up [master_mode].</B> Reverting to pre-game lobby.")
|
||||
|
||||
job_master.ResetOccupations()
|
||||
return 0
|
||||
|
||||
@@ -120,9 +115,7 @@ var/round_start_time = 0
|
||||
modes+=M.name
|
||||
modes = sortList(modes)
|
||||
to_chat(world, "<B>The current game mode is - Secret!</B>")
|
||||
|
||||
to_chat(world, "<B>Possibilities:</B> [english_list(modes)]")
|
||||
|
||||
else
|
||||
src.mode.announce()
|
||||
|
||||
@@ -159,18 +152,14 @@ var/round_start_time = 0
|
||||
qdel(R)
|
||||
|
||||
to_chat(world, "<FONT color='blue'><B>Enjoy the game!</B></FONT>")
|
||||
|
||||
to_chat(world, sound('sound/AI/welcome.ogg'))// Skie
|
||||
|
||||
|
||||
if(holiday_master.holidays)
|
||||
to_chat(world, "<font color='blue'>and...</font>")
|
||||
|
||||
for(var/holidayname in holiday_master.holidays)
|
||||
var/datum/holiday/holiday = holiday_master.holidays[holidayname]
|
||||
to_chat(world, "<h4>[holiday.greet()]</h4>")
|
||||
|
||||
|
||||
spawn(0) // Forking dynamic room selection
|
||||
var/list/area/dynamic/source/available_source_candidates = subtypesof(/area/dynamic/source)
|
||||
var/list/area/dynamic/destination/available_destination_candidates = subtypesof(/area/dynamic/destination)
|
||||
@@ -301,14 +290,12 @@ var/round_start_time = 0
|
||||
flick("intro_nuke",cinematic)
|
||||
sleep(35)
|
||||
to_chat(world, sound('sound/effects/explosionfar.ogg'))
|
||||
|
||||
flick("station_intact_fade_red",cinematic)
|
||||
cinematic.icon_state = "summary_nukefail"
|
||||
else
|
||||
flick("intro_nuke",cinematic)
|
||||
sleep(35)
|
||||
to_chat(world, sound('sound/effects/explosionfar.ogg'))
|
||||
|
||||
//flick("end",cinematic)
|
||||
|
||||
|
||||
@@ -317,7 +304,6 @@ var/round_start_time = 0
|
||||
to_chat(world, sound('sound/effects/explosionfar.ogg'))
|
||||
|
||||
|
||||
|
||||
else //station was destroyed
|
||||
if( mode && !override )
|
||||
override = mode.name
|
||||
@@ -327,28 +313,24 @@ var/round_start_time = 0
|
||||
sleep(35)
|
||||
flick("station_explode_fade_red",cinematic)
|
||||
to_chat(world, sound('sound/effects/explosionfar.ogg'))
|
||||
|
||||
cinematic.icon_state = "summary_nukewin"
|
||||
if("AI malfunction") //Malf (screen,explosion,summary)
|
||||
flick("intro_malf",cinematic)
|
||||
sleep(76)
|
||||
flick("station_explode_fade_red",cinematic)
|
||||
to_chat(world, sound('sound/effects/explosionfar.ogg'))
|
||||
|
||||
cinematic.icon_state = "summary_malf"
|
||||
if("blob") //Station nuked (nuke,explosion,summary)
|
||||
flick("intro_nuke",cinematic)
|
||||
sleep(35)
|
||||
flick("station_explode_fade_red",cinematic)
|
||||
to_chat(world, sound('sound/effects/explosionfar.ogg'))
|
||||
|
||||
cinematic.icon_state = "summary_selfdes"
|
||||
else //Station nuked (nuke,explosion,summary)
|
||||
flick("intro_nuke",cinematic)
|
||||
sleep(35)
|
||||
flick("station_explode_fade_red", cinematic)
|
||||
to_chat(world, sound('sound/effects/explosionfar.ogg'))
|
||||
|
||||
cinematic.icon_state = "summary_selfdes"
|
||||
for(var/mob/living/M in living_mob_list)
|
||||
if((M.loc.z in config.station_levels))
|
||||
@@ -395,7 +377,6 @@ var/round_start_time = 0
|
||||
to_chat(M, "Captainship not forced on anyone.")
|
||||
|
||||
|
||||
|
||||
proc/process()
|
||||
if(current_state != GAME_STATE_PLAYING)
|
||||
return 0
|
||||
@@ -454,20 +435,15 @@ var/round_start_time = 0
|
||||
var/station_integrity = min(round( 100.0 * start_state.score(end_state), 0.1), 100.0)
|
||||
|
||||
to_chat(world, "<BR>[TAB]Shift Duration: <B>[round(world.time / 36000)]:[add_zero("[world.time / 600 % 60]", 2)]:[world.time / 100 % 6][world.time / 100 % 10]</B>")
|
||||
|
||||
to_chat(world, "<BR>[TAB]Station Integrity: <B>[mode.station_was_nuked ? "<font color='red'>Destroyed</font>" : "[station_integrity]%"]</B>")
|
||||
|
||||
to_chat(world, "<BR>")
|
||||
|
||||
|
||||
//Silicon laws report
|
||||
for (var/mob/living/silicon/ai/aiPlayer in mob_list)
|
||||
if (aiPlayer.stat != 2)
|
||||
to_chat(world, "<b>[aiPlayer.name] (Played by: [aiPlayer.key])'s laws at the end of the game were:</b>")
|
||||
|
||||
else
|
||||
to_chat(world, "<b>[aiPlayer.name] (Played by: [aiPlayer.key])'s laws when it was deactivated were:</b>")
|
||||
|
||||
aiPlayer.show_laws(1)
|
||||
|
||||
if (aiPlayer.connected_robots.len)
|
||||
@@ -476,7 +452,6 @@ var/round_start_time = 0
|
||||
robolist += "[robo.name][robo.stat?" (Deactivated) (Played by: [robo.key]), ":" (Played by: [robo.key]), "]"
|
||||
to_chat(world, "[robolist]")
|
||||
|
||||
|
||||
var/dronecount = 0
|
||||
|
||||
for (var/mob/living/silicon/robot/robo in mob_list)
|
||||
@@ -488,18 +463,15 @@ var/round_start_time = 0
|
||||
if (!robo.connected_ai)
|
||||
if (robo.stat != 2)
|
||||
to_chat(world, "<b>[robo.name] (Played by: [robo.key]) survived as an AI-less borg! Its laws were:</b>")
|
||||
|
||||
else
|
||||
to_chat(world, "<b>[robo.name] (Played by: [robo.key]) was unable to survive the rigors of being a cyborg without an AI. Its laws were:</b>")
|
||||
|
||||
|
||||
if(robo) //How the hell do we lose robo between here and the world messages directly above this?
|
||||
robo.laws.show_laws(world)
|
||||
|
||||
if(dronecount)
|
||||
to_chat(world, "<b>There [dronecount>1 ? "were" : "was"] [dronecount] industrious maintenance [dronecount>1 ? "drones" : "drone"] this round.")
|
||||
|
||||
|
||||
mode.declare_completion()//To declare normal completion.
|
||||
|
||||
//calls auto_declare_completion_* for all modes
|
||||
|
||||
@@ -23,16 +23,11 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
|
||||
|
||||
/datum/game_mode/heist/announce()
|
||||
to_chat(world, "<B>The current game mode is - Heist!</B>")
|
||||
|
||||
to_chat(world, "<B>An unidentified bluespace signature has slipped past the Icarus and is approaching [station_name()]!</B>")
|
||||
|
||||
to_chat(world, "Whoever they are, they're likely up to no good. Protect the crew and station resources against this dastardly threat!")
|
||||
|
||||
to_chat(world, "<B>Raiders:</B> Loot [station_name()] for anything and everything you need, or choose the peaceful route and attempt to trade with them.")
|
||||
|
||||
to_chat(world, "<B>Personnel:</B> Trade with the raiders, or repel them and their low, low prices and/or crossbows.")
|
||||
|
||||
|
||||
/datum/game_mode/heist/can_start()
|
||||
|
||||
if(!..())
|
||||
@@ -171,15 +166,10 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
|
||||
|
||||
/datum/game_mode/proc/greet_vox(var/datum/mind/raider)
|
||||
to_chat(raider.current, "\blue <B>You are a Vox Raider, fresh from the Shoal!</b>")
|
||||
|
||||
to_chat(raider.current, "\blue The Vox are a race of cunning, sharp-eyed nomadic raiders and traders endemic to the frontier and much of the unexplored galaxy. You and the crew have come to the [station_name()] for plunder, trade or both.")
|
||||
|
||||
to_chat(raider.current, "\blue Vox are cowardly and will flee from larger groups, but corner one or find them en masse and they are vicious.")
|
||||
|
||||
to_chat(raider.current, "\blue Use :V to voxtalk, :H to talk on your encrypted channel, and don't forget to turn on your nitrogen internals!")
|
||||
|
||||
to_chat(raider.current, "\blue Choose to accomplish your objectives by either raiding the crew and taking what you need, or by attempting to trade with them.")
|
||||
|
||||
spawn(25)
|
||||
show_objectives(raider)
|
||||
|
||||
@@ -234,20 +224,16 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
|
||||
win_msg += "<B>The Vox Raiders were repelled!</B>"
|
||||
|
||||
to_chat(world, "\red <FONT size = 3><B>[win_type] [win_group] victory!</B></FONT>")
|
||||
|
||||
to_chat(world, "[win_msg]")
|
||||
|
||||
feedback_set_details("round_end_result","heist - [win_type] [win_group]")
|
||||
|
||||
var/count = 1
|
||||
for(var/datum/objective/objective in raid_objectives)
|
||||
if(objective.check_completion())
|
||||
to_chat(world, "<br><B>Objective #[count]</B>: [objective.explanation_text] <font color='green'><B>Success!</B></font>")
|
||||
|
||||
feedback_add_details("traitor_objective","[objective.type]|SUCCESS")
|
||||
else
|
||||
to_chat(world, "<br><B>Objective #[count]</B>: [objective.explanation_text] <font color='red'>Fail.</font>")
|
||||
|
||||
feedback_add_details("traitor_objective","[objective.type]|FAIL")
|
||||
count++
|
||||
|
||||
@@ -280,7 +266,6 @@ datum/game_mode/proc/auto_declare_completion_heist()
|
||||
|
||||
to_chat(world, text)
|
||||
|
||||
|
||||
return 1
|
||||
|
||||
/datum/game_mode/heist/check_finished()
|
||||
@@ -304,7 +289,6 @@ datum/game_mode/proc/auto_declare_completion_heist()
|
||||
/obj/vox/win_button/attack_hand(mob/user)
|
||||
if(!istype(ticker.mode, /datum/game_mode/heist) || (world.time < 10 MINUTES)) //has to be heist, and at least ten minutes into the round
|
||||
to_chat(user, "<span class='warning'>\The [src] does not appear to have a connection.</span>")
|
||||
|
||||
return 0
|
||||
|
||||
if(alert(user, "Warning: This will end the round. Are you sure you wish to end the round?", "Vox End", "Yes", "No") == "No")
|
||||
|
||||
@@ -50,7 +50,6 @@ rcd light flash thingy on matter drain
|
||||
src.verbs -= /mob/living/silicon/ai/proc/fireproof_core
|
||||
to_chat(src, "<span class='notice'>Core fireproofed.</span>")
|
||||
|
||||
|
||||
/datum/AI_Module/large/upgrade_turrets
|
||||
module_name = "AI Turret Upgrade"
|
||||
mod_pick_name = "turret"
|
||||
@@ -76,7 +75,6 @@ rcd light flash thingy on matter drain
|
||||
turret.eprojectile = /obj/item/projectile/beam/heavylaser //Once you see it, you will know what it means to FEAR.
|
||||
turret.eshot_sound = 'sound/weapons/lasercannonfire.ogg'
|
||||
to_chat(src, "<span class='notice'>Turrets upgraded.</span>")
|
||||
|
||||
/datum/AI_Module/large/destroy_rcd
|
||||
module_name = "Destroy RCDs"
|
||||
mod_pick_name = "rcd"
|
||||
@@ -103,7 +101,6 @@ rcd light flash thingy on matter drain
|
||||
qdel(RCD)
|
||||
|
||||
to_chat(src, "<span class='danger'>RCD detonation pulse emitted.</span>")
|
||||
|
||||
malf_cooldown = 1
|
||||
spawn(100)
|
||||
malf_cooldown = 0
|
||||
@@ -165,7 +162,6 @@ rcd light flash thingy on matter drain
|
||||
else
|
||||
to_chat(src, "<span class='notice'>That's not a machine.</span>")
|
||||
|
||||
|
||||
/datum/AI_Module/small/override_machine
|
||||
module_name = "Machine Override"
|
||||
mod_pick_name = "override"
|
||||
@@ -200,7 +196,6 @@ rcd light flash thingy on matter drain
|
||||
else
|
||||
to_chat(src, "<span class='notice'>That's not a machine.</span>")
|
||||
|
||||
|
||||
/datum/AI_Module/large/place_cyborg_transformer
|
||||
module_name = "Robotic Factory (Removes Shunting)"
|
||||
mod_pick_name = "cyborgtransformer"
|
||||
@@ -234,7 +229,6 @@ rcd light flash thingy on matter drain
|
||||
can_shunt = 0
|
||||
to_chat(src, "<span class='warning'>You cannot shunt anymore.</span>")
|
||||
|
||||
|
||||
/mob/living/silicon/ai/proc/canPlaceTransformer()
|
||||
if(!eyeobj || !isturf(src.loc))
|
||||
return
|
||||
@@ -300,11 +294,9 @@ rcd light flash thingy on matter drain
|
||||
else
|
||||
apc.overload++
|
||||
to_chat(src, "<span class='notice'>Overcurrent applied to the powernet.</span>")
|
||||
|
||||
else
|
||||
to_chat(src, "<span class='warning'>Out of uses.</span>")
|
||||
|
||||
|
||||
/datum/AI_Module/small/reactivate_cameras
|
||||
module_name = "Reactivate Camera Network"
|
||||
mod_pick_name = "recam"
|
||||
@@ -338,12 +330,10 @@ rcd light flash thingy on matter drain
|
||||
//If a camera is both deactivated and has bad focus, it will cost two uses to fully fix!
|
||||
else
|
||||
to_chat(src, "<span class='warning'>Out of uses.</span>")
|
||||
|
||||
verbs -= /mob/living/silicon/ai/proc/reactivate_cameras //It is useless now, clean it up.
|
||||
break
|
||||
to_chat(src, "<span class='notice'>Diagnostic complete! Operations completed: [fixedcams].</span>")
|
||||
|
||||
|
||||
malf_cooldown = 1
|
||||
spawn(30) //Lag protection
|
||||
malf_cooldown = 0
|
||||
@@ -386,7 +376,6 @@ rcd light flash thingy on matter drain
|
||||
upgradedcams++
|
||||
|
||||
to_chat(src, "<span class='notice'>OTA firmware distribution complete! Cameras upgraded: [upgradedcams]. Light amplification system online.</span>")
|
||||
|
||||
verbs -= /mob/living/silicon/ai/proc/upgrade_cameras
|
||||
|
||||
/datum/module_picker
|
||||
|
||||
@@ -123,7 +123,6 @@
|
||||
to_chat(world, "<FONT size = 3><B>The AI has accessed the station's core files!</B></FONT>")
|
||||
to_chat(world, "<B>It has fully taken control of all of [station_name()]'s systems.</B>")
|
||||
|
||||
|
||||
to_nuke_or_not_to_nuke = 1
|
||||
for(var/datum/mind/AI_mind in malf_ai)
|
||||
to_chat(AI_mind.current, {"\blue Congratulations! You have taken control of the station.<br />)
|
||||
@@ -171,15 +170,12 @@
|
||||
set desc = "Start the victory timer"
|
||||
if (!istype(ticker.mode,/datum/game_mode/malfunction))
|
||||
to_chat(usr, "You cannot begin a takeover in this round type!.")
|
||||
|
||||
return
|
||||
if (ticker.mode:malf_mode_declared)
|
||||
to_chat(usr, "You've already begun your takeover.")
|
||||
|
||||
return
|
||||
if (ticker.mode:apcs < 3)
|
||||
to_chat(usr, "You don't have enough hacked APCs to take over the station yet. You need to hack at least 3, however hacking more will make the takeover faster. You have hacked [ticker.mode:apcs] APCs so far.")
|
||||
|
||||
return
|
||||
|
||||
if (alert(usr, "Are you sure you wish to initiate the takeover? The station hostile runtime detection software is bound to alert everyone. You have hacked [ticker.mode:apcs] APCs.", "Takeover:", "Yes", "No") != "Yes")
|
||||
@@ -206,28 +202,23 @@
|
||||
|
||||
if(!ticker.mode:station_captured)
|
||||
to_chat(usr, "You are unable to access the self-destruct system as you don't control the station yet.")
|
||||
|
||||
return
|
||||
|
||||
if(ticker.mode:explosion_in_progress || ticker.mode:station_was_nuked)
|
||||
to_chat(usr, "The self-destruct countdown is already triggered!")
|
||||
|
||||
return
|
||||
|
||||
if(!ticker.mode:to_nuke_or_not_to_nuke) //Takeover IS completed, but 60s timer passed.
|
||||
to_chat(usr, "You lost control over self-destruct system. It seems to be behind firewall. Unable to hack")
|
||||
|
||||
return
|
||||
|
||||
to_chat(usr, "\red Self-destruct sequence initialised!")
|
||||
|
||||
|
||||
ticker.mode:to_nuke_or_not_to_nuke = 0
|
||||
ticker.mode:explosion_in_progress = 1
|
||||
for(var/mob/M in player_list)
|
||||
to_chat(M, 'sound/machines/Alarm.ogg')
|
||||
|
||||
|
||||
var/obj/item/device/radio/R = new (src)
|
||||
var/AN = "Self-Destruct System"
|
||||
|
||||
@@ -289,42 +280,35 @@
|
||||
to_chat(world, "<FONT size = 3><B>AI Victory</B></FONT>")
|
||||
to_chat(world, "<B>Everyone was killed by the self-destruct!</B>")
|
||||
|
||||
|
||||
else if ( station_captured && malf_dead && !station_was_nuked)
|
||||
feedback_set_details("round_end_result","halfwin - AI killed, staff lost control")
|
||||
to_chat(world, "<FONT size = 3><B>Neutral Victory</B></FONT>")
|
||||
to_chat(world, "<B>The AI has been killed!</B> The staff has lose control over the station.")
|
||||
|
||||
|
||||
else if ( station_captured && !malf_dead && !station_was_nuked)
|
||||
feedback_set_details("round_end_result","win - AI win - no explosion")
|
||||
to_chat(world, "<FONT size = 3><B>AI Victory</B></FONT>")
|
||||
to_chat(world, "<B>The AI has chosen not to explode you all!</B>")
|
||||
|
||||
|
||||
else if (!station_captured && station_was_nuked)
|
||||
feedback_set_details("round_end_result","halfwin - everyone killed by nuke")
|
||||
to_chat(world, "<FONT size = 3><B>Neutral Victory</B></FONT>")
|
||||
to_chat(world, "<B>Everyone was killed by the nuclear blast!</B>")
|
||||
|
||||
|
||||
else if (!station_captured && malf_dead && !station_was_nuked)
|
||||
feedback_set_details("round_end_result","loss - staff win")
|
||||
to_chat(world, "<FONT size = 3><B>Human Victory</B></FONT>")
|
||||
to_chat(world, "<B>The AI has been killed!</B> The staff is victorious.")
|
||||
|
||||
|
||||
else if (!station_captured && !malf_dead && !station_was_nuked && crew_evacuated)
|
||||
feedback_set_details("round_end_result","halfwin - evacuated")
|
||||
to_chat(world, "<FONT size = 3><B>Neutral Victory</B></FONT>")
|
||||
to_chat(world, "<B>The Corporation has lose [station_name()]! All survived personnel will be fired!</B>")
|
||||
|
||||
|
||||
else if (!station_captured && !malf_dead && !station_was_nuked && !crew_evacuated)
|
||||
feedback_set_details("round_end_result","nalfwin - interrupted")
|
||||
to_chat(world, "<FONT size = 3><B>Neutral Victory</B></FONT>")
|
||||
to_chat(world, "<B>Round was mysteriously interrupted!</B>")
|
||||
|
||||
..()
|
||||
return 1
|
||||
|
||||
@@ -353,5 +337,4 @@
|
||||
text += module_text_temp
|
||||
|
||||
to_chat(world, text)
|
||||
|
||||
return 1
|
||||
@@ -12,11 +12,9 @@
|
||||
|
||||
/datum/game_mode/meteor/announce()
|
||||
to_chat(world, "<B>The current game mode is - Meteor!</B>")
|
||||
|
||||
to_chat(world, "<B>The space station has been stuck in a major meteor shower. You must escape from the station or at least live.</B>")
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/meteor/post_setup()
|
||||
spawn(rand(waittime_l, waittime_h))
|
||||
command_announcement.Announce("The station is on the path of an incoming wave of meteors. Reinforce the hull and prepare damage control parties.", "Incoming Meteors", 'sound/effects/siren.ogg')
|
||||
@@ -57,11 +55,9 @@
|
||||
|
||||
if(survivors)
|
||||
to_chat(world, "\blue <B>The following survived the meteor storm</B>:[text]")
|
||||
|
||||
else
|
||||
to_chat(world, "\blue <B>Nobody survived the meteor storm!</B>")
|
||||
|
||||
|
||||
feedback_set_details("round_end_result","end - evacuation")
|
||||
feedback_set("round_end_result",survivors)
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
if (src.client)
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
to_chat(src, "\red You cannot speak in IC (muted).")
|
||||
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
@@ -21,15 +20,12 @@
|
||||
return say_dead(message)
|
||||
var/mob/living/simple_animal/borer/B = src.loc
|
||||
to_chat(src, "You whisper silently, \"[message]\"")
|
||||
|
||||
to_chat(B.host, "The captive mind of [src] whispers, \"[message]\"")
|
||||
|
||||
|
||||
for(var/mob/M in mob_list)
|
||||
if(M.mind && (istype(M, /mob/dead/observer)))
|
||||
to_chat(M, "<i>Thought-speech, <b>[src]</b> -> <b>[B.truename]:</b> [message]</i>")
|
||||
|
||||
|
||||
/mob/living/captive_brain/say_understands(var/mob/other, var/datum/language/speaking = null)
|
||||
var/mob/living/simple_animal/borer/B = src.loc
|
||||
if(!istype(B))
|
||||
@@ -81,7 +77,6 @@
|
||||
set desc = "Send a silent message to your host."
|
||||
if(!host)
|
||||
to_chat(src, "You do not have a host to communicate with!")
|
||||
|
||||
return
|
||||
|
||||
var/input = stripped_input(src, "Please enter a message to tell your host.", "Borer", "")
|
||||
@@ -91,14 +86,11 @@
|
||||
var/say_string = (docile) ? "slurs" :"states"
|
||||
if(host)
|
||||
to_chat(host, "<span class='changeling'><i>[src.truename] [say_string]:</i> [input]</span>")
|
||||
|
||||
log_say("Borer Communication: [key_name(src)] -> [key_name(host)] : [input]")
|
||||
for(var/M in dead_mob_list)
|
||||
if(istype(M, /mob/dead/observer))
|
||||
to_chat(M, "<span class='changeling'><i>Borer Communication from <b>[src.truename]</b> ([ghost_follow_link(src, ghost=M)]): [input]</i>")
|
||||
|
||||
to_chat(src, "<span class='changeling'><i>[src.truename] [say_string]:</i> [input]</span>")
|
||||
|
||||
host.verbs += /mob/living/proc/borer_comm
|
||||
|
||||
/mob/living/simple_animal/borer/verb/toggle_silence_inside_host()
|
||||
@@ -109,12 +101,10 @@
|
||||
if(talk_inside_host)
|
||||
talk_inside_host = 0
|
||||
to_chat(src, "<span class='notice'>You will no longer talk audibly while inside a host.</span>")
|
||||
|
||||
else
|
||||
talk_inside_host = 1
|
||||
to_chat(src, "<span class='notice'>You will now be able to audibly speak from inside of a host.</span>")
|
||||
|
||||
|
||||
/mob/living/proc/borer_comm()
|
||||
set name = "Converse with Borer"
|
||||
set category = "Borer"
|
||||
@@ -129,16 +119,13 @@
|
||||
if(!input) return
|
||||
|
||||
to_chat(B, "<span class='changeling'><i>[src] says:</i> [input]</span>")
|
||||
|
||||
log_say("Borer Communication: [key_name(src)] -> [key_name(B)] : [input]")
|
||||
|
||||
for(var/M in dead_mob_list)
|
||||
if(istype(M, /mob/dead/observer))
|
||||
to_chat(M, "<span class='changeling'><i>Borer Communication from <b>[src]</b> ([ghost_follow_link(src, ghost=M)]): [input]</i>")
|
||||
|
||||
to_chat(src, "<span class='changeling'><i>[src] says:</i> [input]</span>")
|
||||
|
||||
|
||||
/mob/living/proc/trapped_mind_comm()
|
||||
set name = "Converse with Trapped Mind"
|
||||
set category = "Borer"
|
||||
@@ -153,16 +140,13 @@
|
||||
if(!input) return
|
||||
|
||||
to_chat(CB, "<span class='changeling'><i>[B.truename] says:</i> [input]</span>")
|
||||
|
||||
log_say("Borer Communication: [key_name(B)] -> [key_name(CB)] : [input]")
|
||||
|
||||
for(var/M in dead_mob_list)
|
||||
if(istype(M, /mob/dead/observer))
|
||||
to_chat(M, "<span class='changeling'><i>Borer Communication from <b>[B]</b> ([ghost_follow_link(src, ghost=M)]): [input]</i>")
|
||||
|
||||
to_chat(src, "<span class='changeling'><i>[B.truename] says:</i> [input]</span>")
|
||||
|
||||
|
||||
/mob/living/simple_animal/borer/Life()
|
||||
|
||||
..()
|
||||
@@ -175,19 +159,15 @@
|
||||
if(!docile)
|
||||
if(controlling)
|
||||
to_chat(host, "\blue You feel the soporific flow of sugar in your host's blood, lulling you into docility.")
|
||||
|
||||
else
|
||||
to_chat(src, "\blue You feel the soporific flow of sugar in your host's blood, lulling you into docility.")
|
||||
|
||||
docile = 1
|
||||
else
|
||||
if(docile)
|
||||
if(controlling)
|
||||
to_chat(host, "\blue You shake off your lethargy as the sugar leaves your host's blood.")
|
||||
|
||||
else
|
||||
to_chat(src, "\blue You shake off your lethargy as the sugar leaves your host's blood.")
|
||||
|
||||
docile = 0
|
||||
|
||||
if(chemicals < max_chems)
|
||||
@@ -196,7 +176,6 @@
|
||||
|
||||
if(docile)
|
||||
to_chat(host, "\blue You are feeling far too docile to continue controlling your host...")
|
||||
|
||||
host.release_control()
|
||||
return
|
||||
|
||||
@@ -238,7 +217,6 @@
|
||||
if(M.mind && (istype(M, /mob/living/simple_animal/borer) || istype(M, /mob/dead/observer)))
|
||||
to_chat(M, "<i>Cortical link, <b>[truename]:</b> [copytext(message, 2)]</i>")
|
||||
|
||||
|
||||
/mob/living/simple_animal/borer/verb/dominate_victim()
|
||||
set category = "Borer"
|
||||
set name = "Dominate Victim"
|
||||
@@ -246,17 +224,14 @@
|
||||
|
||||
if(world.time - used_dominate < 300)
|
||||
to_chat(src, "You cannot use that ability again so soon.")
|
||||
|
||||
return
|
||||
|
||||
if(host)
|
||||
to_chat(src, "You cannot do that from within a host body.")
|
||||
|
||||
return
|
||||
|
||||
if(src.stat)
|
||||
to_chat(src, "You cannot do that in your current state.")
|
||||
|
||||
return
|
||||
|
||||
var/list/choices = list()
|
||||
@@ -266,7 +241,6 @@
|
||||
|
||||
if(world.time - used_dominate < 300)
|
||||
to_chat(src, "You cannot use that ability again so soon.")
|
||||
|
||||
return
|
||||
|
||||
var/mob/living/carbon/M = input(src,"Who do you wish to dominate?") in null|choices
|
||||
@@ -275,13 +249,10 @@
|
||||
|
||||
if(M.has_brain_worms())
|
||||
to_chat(src, "You cannot infest someone who is already infested!")
|
||||
|
||||
return
|
||||
|
||||
to_chat(src, "\red You focus your psychic lance on [M] and freeze their limbs with a wave of terrible dread.")
|
||||
|
||||
to_chat(M, "\red You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing.")
|
||||
|
||||
M.Weaken(3)
|
||||
|
||||
used_dominate = world.time
|
||||
@@ -293,31 +264,25 @@
|
||||
|
||||
if(!host)
|
||||
to_chat(src, "You are not inside a host body.")
|
||||
|
||||
return
|
||||
|
||||
if(src.stat)
|
||||
to_chat(src, "You cannot do that in your current state.")
|
||||
|
||||
return
|
||||
|
||||
if(docile)
|
||||
to_chat(src, "\blue You are feeling far too docile to do that.")
|
||||
|
||||
return
|
||||
|
||||
to_chat(src, "You begin delicately adjusting your connection to the host brain...")
|
||||
|
||||
|
||||
spawn(300+(host.getBrainLoss()*5))
|
||||
|
||||
if(!host || !src || controlling)
|
||||
return
|
||||
else
|
||||
to_chat(src, "\red <B>You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system.</B>")
|
||||
|
||||
to_chat(host, "\red <B>You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours.</B>")
|
||||
|
||||
var/borer_key = src.key
|
||||
host.attack_log += text("\[[time_stamp()]\] <font color='blue'>[key_name(src)] has assumed control of [key_name(host)]</font>")
|
||||
msg_admin_attack("[key_name_admin(src)] has assumed control of [key_name_admin(host)]")
|
||||
@@ -375,22 +340,18 @@
|
||||
var/chem_cost = 30
|
||||
if(!host)
|
||||
to_chat(src, "You are not inside a host body.")
|
||||
|
||||
return
|
||||
|
||||
if(stat)
|
||||
to_chat(src, "You cannot secrete chemicals in your current state.")
|
||||
|
||||
|
||||
if(docile)
|
||||
to_chat(src, "\blue You are feeling far too docile to do that.")
|
||||
|
||||
return
|
||||
|
||||
if(chemicals < chem_cost)
|
||||
to_chat(src, "You don't have enough chemicals!")
|
||||
|
||||
|
||||
var/list/nice_name_chem_list = list()
|
||||
for(var/rgnt in borer_injection_chems)
|
||||
var/datum/reagent/R2 = chemical_reagents_list[rgnt]
|
||||
@@ -405,11 +366,9 @@
|
||||
var/datum/reagent/R = chemical_reagents_list[chem]
|
||||
if(R.overdose_threshold && chem_amount + injection_amount > R.overdose_threshold)
|
||||
to_chat(src, "<span class='warning'>Doing so would cause grievous harm to your host, reducing ability to reproduce. Aborting.</span>")
|
||||
|
||||
return
|
||||
|
||||
to_chat(src, "<span class='notice'>You squirt a measure of [chem_name] from your reservoirs into [host]'s bloodstream.</span>")
|
||||
|
||||
host.reagents.add_reagent(chem, injection_amount)
|
||||
chemicals -= chem_cost
|
||||
|
||||
@@ -420,35 +379,29 @@
|
||||
|
||||
if(!host)
|
||||
to_chat(src, "You are not inside a host body.")
|
||||
|
||||
return
|
||||
|
||||
if(stat)
|
||||
to_chat(src, "You cannot leave your host in your current state.")
|
||||
|
||||
|
||||
if(docile)
|
||||
to_chat(src, "\blue You are feeling far too docile to do that.")
|
||||
|
||||
return
|
||||
|
||||
if(!host || !src) return
|
||||
|
||||
to_chat(src, "You begin disconnecting from [host]'s synapses and prodding at their internal ear canal.")
|
||||
|
||||
|
||||
spawn(200)
|
||||
|
||||
if(!host || !src) return
|
||||
|
||||
if(src.stat)
|
||||
to_chat(src, "You cannot release a target in your current state.")
|
||||
|
||||
return
|
||||
|
||||
to_chat(src, "You wiggle out of [host]'s ear and plop to the ground.")
|
||||
|
||||
|
||||
detatch()
|
||||
leave_host()
|
||||
|
||||
@@ -521,13 +474,11 @@
|
||||
if(B && B.host_brain)
|
||||
to_chat(src, "\red <B>You withdraw your probosci, releasing control of [B.host_brain]</B>")
|
||||
|
||||
|
||||
B.detatch()
|
||||
|
||||
else
|
||||
to_chat(src, "\red <B>ERROR NO BORER OR BRAINMOB DETECTED IN THIS MOB, THIS IS A BUG !</B>")
|
||||
|
||||
|
||||
//Brain slug proc for tormenting the host.
|
||||
/mob/living/carbon/proc/punish_host()
|
||||
set category = "Borer"
|
||||
@@ -541,10 +492,8 @@
|
||||
|
||||
if(B.host_brain.ckey)
|
||||
to_chat(src, "\red <B>You send a punishing spike of psychic agony lancing into your host's brain.</B>")
|
||||
|
||||
to_chat(B.host_brain, "\red <B><FONT size=3>Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!</FONT></B>")
|
||||
|
||||
|
||||
//Check for brain worms in head.
|
||||
/mob/proc/has_brain_worms()
|
||||
|
||||
@@ -566,7 +515,6 @@
|
||||
|
||||
if(B.chemicals >= 100)
|
||||
to_chat(src, "\red <B>Your host twitches and quivers as you rapdly excrete several larvae from your sluglike body.</B>")
|
||||
|
||||
visible_message("\red <B>[src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!</B>")
|
||||
B.chemicals -= 100
|
||||
|
||||
@@ -576,7 +524,6 @@
|
||||
|
||||
else
|
||||
to_chat(src, "You do not have enough chemicals stored to reproduce.")
|
||||
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/borer/proc/leave_host()
|
||||
@@ -604,12 +551,10 @@
|
||||
|
||||
if(host)
|
||||
to_chat(src, "You are already within a host.")
|
||||
|
||||
return
|
||||
|
||||
if(stat)
|
||||
to_chat(src, "You cannot infest a target in your current state.")
|
||||
|
||||
return
|
||||
|
||||
var/list/choices = list()
|
||||
@@ -628,36 +573,29 @@
|
||||
|
||||
if(M.has_brain_worms())
|
||||
to_chat(src, "You cannot infest someone who is already infested!")
|
||||
|
||||
return
|
||||
|
||||
to_chat(src, "You slither up [M] and begin probing at their ear canal...")
|
||||
|
||||
|
||||
if(!do_after(src,50, target = M))
|
||||
to_chat(src, "As [M] moves away, you are dislodged and fall to the ground.")
|
||||
|
||||
return
|
||||
|
||||
if(!M || !src) return
|
||||
|
||||
if(src.stat)
|
||||
to_chat(src, "You cannot infest a target in your current state.")
|
||||
|
||||
return
|
||||
|
||||
if(M.stat == DEAD)
|
||||
to_chat(src, "That is not an appropriate target.")
|
||||
|
||||
return
|
||||
|
||||
if(M in view(1, src))
|
||||
to_chat(src, "You wiggle into [M]'s ear.")
|
||||
|
||||
/*
|
||||
if(!M.stat)
|
||||
to_chat(M, "Something disgusting and slimy wiggles into your ear!")
|
||||
|
||||
*/ // Let's see how stealthborers work out
|
||||
|
||||
perform_infestation(M)
|
||||
@@ -665,7 +603,6 @@
|
||||
return
|
||||
else
|
||||
to_chat(src, "They are no longer in range!")
|
||||
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/borer/proc/perform_infestation(var/mob/living/carbon/M)
|
||||
@@ -722,18 +659,15 @@
|
||||
if (layer != TURF_LAYER+0.2)
|
||||
layer = TURF_LAYER+0.2
|
||||
to_chat(src, "\green You are now hiding.")
|
||||
|
||||
else
|
||||
layer = MOB_LAYER
|
||||
to_chat(src, "\green You have stopped hiding.")
|
||||
|
||||
|
||||
/mob/living/simple_animal/borer/say(var/message)
|
||||
var/datum/language/dialect = parse_language(message)
|
||||
if(!dialect)
|
||||
dialect = get_default_language()
|
||||
if(!istype(dialect, /datum/language/corticalborer) && loc == host && !talk_inside_host)
|
||||
to_chat(src, "<span class='warning'>You've disabled audible speech while inside a host! Re-enable it under the borer tab, or stick to borer communications.</span>")
|
||||
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
return
|
||||
if(qdeleted(src))
|
||||
to_chat(user, "Swarmer has been occupied by someone else.")
|
||||
|
||||
return
|
||||
var/mob/living/simple_animal/hostile/swarmer/S = new /mob/living/simple_animal/hostile/swarmer(get_turf(loc))
|
||||
S.key = user.key
|
||||
@@ -73,18 +72,12 @@
|
||||
/mob/living/simple_animal/hostile/swarmer/Login()
|
||||
..()
|
||||
to_chat(src, "<b>You are a swarmer, a weapon of a long dead civilization. Until further orders from your original masters are received, you must continue to consume and replicate.</b>")
|
||||
|
||||
to_chat(src, "<b>Ctrl + Click provides most of your swarmer specific interactions, such as cannibalizing metal or glass, destroying the environment, or teleporting mobs away from you.")
|
||||
|
||||
to_chat(src, "<b>Objectives:</b>")
|
||||
|
||||
to_chat(src, "1. Consume resources and replicate until there are no more resources left.")
|
||||
|
||||
to_chat(src, "2. Ensure that the station is fit for invasion at a later date, do not perform actions that would render it dangerous or inhospitable.")
|
||||
|
||||
to_chat(src, "3. Biological and Sentient resources will be harvested at a later date, do not harm them.")
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/swarmer/New()
|
||||
..()
|
||||
add_language("Swarmer", 1)
|
||||
@@ -166,32 +159,25 @@
|
||||
/obj/machinery/particle_accelerator/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Disrupting the power grid would bring no benefit to us. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/structure/particle_accelerator/fuel_chamber/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Disrupting the power grid would bring no benefit to us. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/structure/particle_accelerator/particle_emitter/center/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Disrupting the power grid would bring no benefit to us. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/structure/particle_accelerator/particle_emitter/left/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Disrupting the power grid would bring no benefit to us. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/structure/particle_accelerator/particle_emitter/right/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Disrupting the power grid would bring no benefit to us. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/structure/particle_accelerator/particle_emitter/end_cap/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Disrupting the power grid would bring no benefit to us. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/structure/particle_accelerator/particle_emitter/power_box/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Disrupting the power grid would bring no benefit to us. Aborting.</span>")
|
||||
|
||||
|
||||
|
||||
/obj/machinery/field/generator/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
S.DisIntegrate(src)
|
||||
|
||||
@@ -207,64 +193,49 @@
|
||||
/obj/machinery/chem_dispenser/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>The volatile chemicals in this machine would destroy us. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/machinery/nuclearbomb/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>This device's destruction would result in the extermination of everything in the area. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/effect/rune/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Searching... sensor malfunction! Target lost. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Destroying this object would cause a chain reaction. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/structure/cable/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Disrupting the power grid would bring no benefit to us. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>An inhospitable area may be created as a result of destroying this object. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/machinery/telecomms/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>This communications relay should be preserved, it will be a useful resource to our masters in the future. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/machinery/message_server/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>This communications relay should be preserved, it will be a useful resource to our masters in the future. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/machinery/blackbox_recorder/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>This machine has recorded large amounts of data on this structure and its inhabitants, it will be a useful resource to our masters in the future. Aborting. </span>")
|
||||
|
||||
|
||||
/obj/machinery/power/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Disrupting the power grid would bring no benefit to us. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/machinery/gateway/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>This bluespace source will be important to us later. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/machinery/cryopod/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>This cryogenic sleeper should be preserved, it will be a useful resource to our masters in the future. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/structure/cryofeed/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>This cryogenic feed should be preserved, it will be a useful resource to our masters in the future. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/machinery/computer/cryopod/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>This cryopod control computer should be preserved, it contains useful items and information about the inhabitants. Aborting.</span>")
|
||||
|
||||
|
||||
/turf/simulated/wall/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
for(var/turf/T in range(1, src))
|
||||
if(istype(T, /turf/space) || istype(T.loc, /area/space))
|
||||
to_chat(S, "<span class='warning'>Destroying this object has the potential to cause a hull breach. Aborting.</span>")
|
||||
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -272,44 +243,36 @@
|
||||
for(var/turf/T in range(1, src))
|
||||
if(istype(T, /turf/space) || istype(T.loc, /area/space))
|
||||
to_chat(S, "<span class='warning'>Destroying this object has the potential to cause a hull breach. Aborting.</span>")
|
||||
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/stack/cable_coil/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)//Wiring would be too effective as a resource
|
||||
to_chat(S, "<span class='warning'>This object does not contain enough materials to work with.</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/circuitboard/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>This object does not contain enough materials to work with.</span>")
|
||||
|
||||
|
||||
/obj/machinery/porta_turret/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Attempting to dismantle this machine would result in an immediate counterattack. Aborting.</span>")
|
||||
|
||||
|
||||
/obj/spacepod/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Destroying this vehicle would destroy us. Aborting.</span>")
|
||||
|
||||
|
||||
/mob/living/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
S.DisperseTarget(src)
|
||||
|
||||
/mob/living/carbon/slime/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>This biological resource is somehow resisting our bluespace transceiver. Aborting.</span>")
|
||||
|
||||
|
||||
////END CTRL CLICK FOR SWARMERS////
|
||||
|
||||
/mob/living/simple_animal/hostile/swarmer/proc/Fabricate(var/atom/fabrication_object,var/fabrication_cost = 0)
|
||||
if(!isturf(loc))
|
||||
to_chat(src, "<span class='warning'>This is not a suitable location for fabrication. We need more space.</span>")
|
||||
|
||||
if(resources >= fabrication_cost)
|
||||
resources -= fabrication_cost
|
||||
else
|
||||
to_chat(src, "<span class='warning'>You do not have the necessary resources to fabricate this object.</span>")
|
||||
|
||||
return 0
|
||||
new fabrication_object(loc)
|
||||
return 1
|
||||
@@ -317,7 +280,6 @@
|
||||
/mob/living/simple_animal/hostile/swarmer/proc/Integrate(var/obj/item/target)
|
||||
if(resources >= 100)
|
||||
to_chat(src, "<span class='warning'>We cannot hold more materials!</span>")
|
||||
|
||||
return
|
||||
//Check if any entries are either MAT_METAL or MAT_GLASS
|
||||
if((MAT_METAL in target.materials) || (MAT_GLASS in target.materials))
|
||||
@@ -335,7 +297,6 @@
|
||||
qdel(target)
|
||||
else
|
||||
to_chat(src, "<span class='warning'>\the [target] is incompatible with our internal matter recycler.</span>")
|
||||
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/swarmer/proc/DisIntegrate(var/atom/movable/target)
|
||||
@@ -347,10 +308,8 @@
|
||||
/mob/living/simple_animal/hostile/swarmer/proc/DisperseTarget(var/mob/living/target)
|
||||
if(target != src)
|
||||
to_chat(src, "<span class='info'>Attempting to remove this being from our presence.</span>")
|
||||
|
||||
if(src.z != ZLEVEL_STATION)
|
||||
to_chat(src, "<span class='warning'>Our bluespace transceiver cannot locate a viable bluespace link, our teleportation abilities are useless in this area.</span>")
|
||||
|
||||
return
|
||||
if(do_mob(src, target, 30))
|
||||
var/cycle
|
||||
@@ -375,17 +334,14 @@
|
||||
/mob/living/simple_animal/hostile/swarmer/proc/DismantleMachine(var/obj/machinery/target)
|
||||
do_attack_animation(target)
|
||||
to_chat(src, "<span class='info'>We begin to dismantle this machine. We will need to be uninterrupted.</span>")
|
||||
|
||||
var/obj/effect/swarmer/dismantle/D = new /obj/effect/swarmer/dismantle(get_turf(target))
|
||||
D.pixel_x = target.pixel_x
|
||||
D.pixel_y = target.pixel_y
|
||||
if(do_mob(src, target, 100))
|
||||
if(!src.Adjacent(target))
|
||||
to_chat(src, "<span class='info'>Error:Dismantleing aborted.</span>")
|
||||
|
||||
else
|
||||
to_chat(src, "<span class='info'>Dismantling complete.</span>")
|
||||
|
||||
var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal(target.loc)
|
||||
M.amount = 5
|
||||
if(target.component_parts && target.component_parts.len)
|
||||
@@ -485,7 +441,6 @@
|
||||
set desc = "Creates a simple trap that will non-lethally electrocute anything that steps on it. Costs 5 resources"
|
||||
if(/obj/effect/swarmer/destructible/trap in loc)
|
||||
to_chat(src, "<span class='warning'>There is already a trap here. Aborting.</span>")
|
||||
|
||||
return
|
||||
Fabricate(/obj/effect/swarmer/destructible/trap, 5)
|
||||
return
|
||||
@@ -514,11 +469,9 @@
|
||||
set desc = "Creates a barricade that will stop anything but swarmers and disabler beams from passing through."
|
||||
if(/obj/effect/swarmer/destructible/blockade in loc)
|
||||
to_chat(src, "<span class='warning'>There is already a blockade here. Aborting.</span>")
|
||||
|
||||
return
|
||||
if(resources < 5)
|
||||
to_chat(src, "<span class='warning'>We do not have the resources for this!</span>")
|
||||
|
||||
return
|
||||
if(do_mob(src, src, 10))
|
||||
Fabricate(/obj/effect/swarmer/destructible/blockade, 5)
|
||||
@@ -544,14 +497,11 @@
|
||||
set category = "Swarmer"
|
||||
set desc = "Creates a shell for a new swarmer. Swarmers will self activate."
|
||||
to_chat(src, "<span class='info'>We are attempting to replicate ourselves. We will need to stand still until the process is complete.</span>")
|
||||
|
||||
if(resources < 50)
|
||||
to_chat(src, "<span class='warning'>We do not have the resources for this!</span>")
|
||||
|
||||
return
|
||||
if(!isturf(loc))
|
||||
to_chat(src, "<span class='warning'>This is not a suitable location for replicating ourselves. We need more room.</span>")
|
||||
|
||||
return
|
||||
if(do_mob(src, src, 100))
|
||||
if(Fabricate(/obj/item/unactivated_swarmer, 50))
|
||||
@@ -564,12 +514,10 @@
|
||||
if(!isturf(loc))
|
||||
return
|
||||
to_chat(src, "<span class='info'>Attempting to repair damage to our body, stand by...</span>")
|
||||
|
||||
if(do_mob(src, src, 100))
|
||||
adjustBruteLoss(-100)
|
||||
to_chat(src, "<span class='info'>We successfully repaired ourselves.</span>")
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/swarmer/proc/ToggleLight()
|
||||
if(!light_range)
|
||||
set_light(3)
|
||||
@@ -585,7 +533,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
////HUD NONSENSE////
|
||||
/obj/screen/swarmer
|
||||
icon = 'icons/mob/swarmer.dmi'
|
||||
|
||||
@@ -43,7 +43,6 @@
|
||||
if(summoner)
|
||||
if(summoner.stat == DEAD)
|
||||
to_chat(src, "<span class='danger'>Your summoner has died!</span>")
|
||||
|
||||
visible_message("<span class='danger'><B>The [src] dies along with its user!</B></span>")
|
||||
ghostize()
|
||||
qdel(src)
|
||||
@@ -52,12 +51,10 @@
|
||||
return
|
||||
else
|
||||
to_chat(src, "You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]")
|
||||
|
||||
visible_message("<span class='danger'>The [src] jumps back to its user.</span>")
|
||||
Recall()
|
||||
if(summoned && !summoner && !adminseal)
|
||||
to_chat(src, "<span class='danger'>You somehow lack a summoner! As a result, you dispel!</span>")
|
||||
|
||||
ghostize()
|
||||
qdel()
|
||||
|
||||
@@ -68,14 +65,12 @@
|
||||
return
|
||||
else
|
||||
to_chat(src, "You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]")
|
||||
|
||||
visible_message("<span class='danger'>The [src] jumps back to its user.</span>")
|
||||
Recall()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/death()
|
||||
..()
|
||||
to_chat(summoner, "<span class='danger'><B>Your [name] died somehow!</span></B>")
|
||||
|
||||
summoner.death()
|
||||
|
||||
|
||||
@@ -97,11 +92,9 @@
|
||||
summoner.adjustBruteLoss(damage)
|
||||
if(damage)
|
||||
to_chat(summoner, "<span class='danger'><B>Your [name] is under attack! You take damage!</span></B>")
|
||||
|
||||
summoner.visible_message("<span class='danger'><B>Blood sprays from [summoner] as [src] takes damage!</B></span>")
|
||||
if(summoner.stat == UNCONSCIOUS)
|
||||
to_chat(summoner, "<span class='danger'><B>Your body can't take the strain of sustaining [src] in this condition, it begins to fall apart!</span></B>")
|
||||
|
||||
summoner.adjustCloneLoss(damage/2)
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ex_act(severity, target)
|
||||
@@ -118,7 +111,6 @@
|
||||
/mob/living/simple_animal/hostile/guardian/gib()
|
||||
if(summoner)
|
||||
to_chat(summoner, "<span class='danger'><B>Your [src] was blown up!</span></B>")
|
||||
|
||||
summoner.Weaken(10)// your fermillier has died! ROLL FOR CON LOSS!
|
||||
ghostize()
|
||||
qdel(src)
|
||||
@@ -151,19 +143,15 @@
|
||||
for(var/mob/M in mob_list)
|
||||
if(M == summoner)
|
||||
to_chat(M, "<span class='changeling'><i>[src]:</i> [input]</span>")
|
||||
|
||||
log_say("Guardian Communication: [key_name(src)] -> [key_name(M)] : [input]")
|
||||
else if (M in dead_mob_list)
|
||||
to_chat(M, "<span class='changeling'><i>Guardian Communication from <b>[src]</b> ([ghost_follow_link(src, ghost=M)]): [input]</i>")
|
||||
|
||||
to_chat(src, "<span class='changeling'><i>[src]:</i> [input]</span>")
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/proc/ToggleMode()
|
||||
to_chat(src, "<span class='danger'><B>You dont have another mode!</span></B>")
|
||||
|
||||
|
||||
|
||||
/mob/living/proc/guardian_comm()
|
||||
set name = "Communicate"
|
||||
set category = "Guardian"
|
||||
@@ -176,15 +164,12 @@
|
||||
var/mob/living/simple_animal/hostile/guardian/G = M
|
||||
if(G.summoner == src)
|
||||
to_chat(G, "<span class='changeling'><i>[src]:</i> [input]</span>")
|
||||
|
||||
log_say("Guardian Communication: [key_name(src)] -> [key_name(G)] : [input]")
|
||||
|
||||
else if (M in dead_mob_list)
|
||||
to_chat(M, "<span class='changeling'><i>Guardian Communication from <b>[src]</b> ([ghost_follow_link(src, ghost=M)]): [input]</i>")
|
||||
|
||||
to_chat(src, "<span class='changeling'><i>[src]:</i> [input]</span>")
|
||||
|
||||
|
||||
/mob/living/proc/guardian_recall()
|
||||
set name = "Recall Guardian"
|
||||
set category = "Guardian"
|
||||
@@ -206,15 +191,12 @@
|
||||
if(candidates.len)
|
||||
new_stand = pick(candidates)
|
||||
to_chat(G, "Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance.")
|
||||
|
||||
to_chat(src, "Your guardian has been successfully reset.")
|
||||
|
||||
message_admins("[key_name_admin(new_stand)] has taken control of ([key_name_admin(G)])")
|
||||
G.ghostize(0)
|
||||
G.key = new_stand.key
|
||||
else
|
||||
to_chat(src, "There were no ghosts willing to take control. Looks like you're stuck with your Guardian for now.")
|
||||
|
||||
spawn(3000)
|
||||
verbs += /mob/living/proc/guardian_reset
|
||||
|
||||
@@ -223,13 +205,11 @@
|
||||
if(!luminosity)
|
||||
set_light(3)
|
||||
to_chat(src, "<span class='notice'>You activate your light.</span>")
|
||||
|
||||
else
|
||||
set_light(0)
|
||||
to_chat(src, "<span class='notice'>You deactivate your light.</span>")
|
||||
|
||||
|
||||
|
||||
//////////////////////////TYPES OF GUARDIANS
|
||||
|
||||
|
||||
@@ -260,11 +240,9 @@
|
||||
if(src.loc == summoner)
|
||||
if(toggle)
|
||||
to_chat(src, "You switch to dispersion mode, and will teleport victims away from your master.")
|
||||
|
||||
toggle = FALSE
|
||||
else
|
||||
to_chat(src, "You switch to deception mode, and will turn your victims against their allies.")
|
||||
|
||||
toggle = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire/AttackingTarget()
|
||||
@@ -404,7 +382,6 @@
|
||||
if(toggle == TRUE)
|
||||
if(src.loc == summoner)
|
||||
to_chat(src, "<span class='danger'><B>You must be manifested to heal!</span></B>")
|
||||
|
||||
return
|
||||
if(iscarbon(target))
|
||||
src.changeNext_move(CLICK_CD_MELEE)
|
||||
@@ -427,7 +404,6 @@
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
to_chat(src, "<span class='danger'><B>You switch to combat mode.</span></B>")
|
||||
|
||||
toggle = FALSE
|
||||
else
|
||||
a_intent = I_HELP
|
||||
@@ -438,13 +414,11 @@
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
to_chat(src, "<span class='danger'><B>You switch to healing mode.</span></B>")
|
||||
|
||||
toggle = TRUE
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>You have to be recalled to toggle modes!</span></B>")
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/healer/verb/Beacon()
|
||||
set name = "Place Bluespsace Beacon"
|
||||
set category = "Guardian"
|
||||
@@ -458,7 +432,6 @@
|
||||
F.desc = "A recieving zone for bluespace teleportations. Building a wall over it should disable it."
|
||||
F.icon_state = "light_on-w"
|
||||
to_chat(src, "<span class='danger'><B>Beacon placed! You may now warp targets to it, including your user, via Alt+Click. </span></B>")
|
||||
|
||||
if(beacon)
|
||||
beacon.ChangeTurf(/turf/simulated/floor/plating)
|
||||
beacon = F
|
||||
@@ -467,28 +440,22 @@
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>Your power is on cooldown. You must wait five minutes between placing beacons.</span></B>")
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/healer/AltClickOn(atom/movable/A)
|
||||
if(!istype(A))
|
||||
return
|
||||
if(src.loc == summoner)
|
||||
to_chat(src, "<span class='danger'><B>You must be manifested to warp a target!</span></B>")
|
||||
|
||||
return
|
||||
if(!beacon)
|
||||
to_chat(src, "<span class='danger'><B>You need a beacon placed to warp things!</span></B>")
|
||||
|
||||
return
|
||||
if(!Adjacent(A))
|
||||
to_chat(src, "<span class='danger'><B>You must be adjacent to your target!</span></B>")
|
||||
|
||||
return
|
||||
if((A.anchored))
|
||||
to_chat(src, "<span class='danger'><B>Your target can not be anchored!</span></B>")
|
||||
|
||||
return
|
||||
to_chat(src, "<span class='danger'><B>You begin to warp [A]</span></B>")
|
||||
|
||||
if(do_mob(src, A, 50))
|
||||
if(!A.anchored)
|
||||
if(src.beacon) //Check that the beacon still exists and is in a safe place. No instant kills.
|
||||
@@ -503,18 +470,14 @@
|
||||
new /obj/effect/overlay/temp/guardian/phase(get_turf(A))
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>The beacon isn't in a safe location!</span></B>")
|
||||
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>The beacon isn't in a safe location!</span></B>")
|
||||
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>You need a beacon to warp things!</span></B>")
|
||||
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>You need to hold still!</span></B>")
|
||||
|
||||
|
||||
|
||||
///////////////////Ranged
|
||||
|
||||
/obj/item/projectile/guardian
|
||||
@@ -555,7 +518,6 @@
|
||||
range = 13
|
||||
incorporeal_move = 0
|
||||
to_chat(src, "<span class='danger'><B>You switch to combat mode.</span></B>")
|
||||
|
||||
toggle = FALSE
|
||||
else
|
||||
ranged = 0
|
||||
@@ -565,20 +527,16 @@
|
||||
range = 255
|
||||
incorporeal_move = 1
|
||||
to_chat(src, "<span class='danger'><B>You switch to scout mode.</span></B>")
|
||||
|
||||
toggle = TRUE
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>You have to be recalled to toggle modes!</span></B>")
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ranged/ToggleLight()
|
||||
if(see_invisible == SEE_INVISIBLE_MINIMUM)
|
||||
to_chat(src, "<span class='notice'>You deactivate your night vision.</span>")
|
||||
|
||||
see_invisible = SEE_INVISIBLE_LIVING
|
||||
else
|
||||
to_chat(src, "<span class='notice'>You activate your night vision.</span>")
|
||||
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ranged/verb/Snare()
|
||||
@@ -592,11 +550,9 @@
|
||||
S.name = "[get_area(snare_loc)] trap ([rand(1, 1000)])"
|
||||
src.snares |= S
|
||||
to_chat(src, "<span class='danger'><B>Surveillance trap deployed!</span></B>")
|
||||
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>You have too many traps deployed. Delete some first.</span></B>")
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ranged/verb/DisarmSnare()
|
||||
set name = "Remove Surveillance Trap"
|
||||
set category = "Guardian"
|
||||
@@ -607,7 +563,6 @@
|
||||
qdel(picked_snare)
|
||||
to_chat(src, "<span class='danger'><B>Snare disarmed.</span></B>")
|
||||
|
||||
|
||||
/obj/item/effect/snare
|
||||
name = "snare"
|
||||
desc = "You shouldn't be seeing this!"
|
||||
@@ -620,13 +575,11 @@
|
||||
var/turf/snare_loc = get_turf(src.loc)
|
||||
if(spawner)
|
||||
to_chat(spawner, "<span class='danger'><B>[AM] has crossed your surveillance trap at [get_area(snare_loc)].</span></B>")
|
||||
|
||||
if(istype(spawner, /mob/living/simple_animal/hostile/guardian))
|
||||
var/mob/living/simple_animal/hostile/guardian/G = spawner
|
||||
if(G.summoner)
|
||||
to_chat(G.summoner, "<span class='danger'><B>[AM] has crossed your surveillance trap at [get_area(snare_loc)].</span></B>")
|
||||
|
||||
|
||||
////Bomb
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/bomb
|
||||
@@ -645,23 +598,19 @@
|
||||
return
|
||||
if(src.loc == summoner)
|
||||
to_chat(src, "<span class='danger'><B>You must be manifested to create bombs!</B></span>")
|
||||
|
||||
return
|
||||
if(istype(A, /obj/))
|
||||
if(bomb_cooldown <= world.time && !stat)
|
||||
var/obj/item/weapon/guardian_bomb/B = new /obj/item/weapon/guardian_bomb(get_turf(A))
|
||||
to_chat(src, "<span class='danger'><B>Success! Bomb on \the [A] armed!</B></span>")
|
||||
|
||||
if(summoner)
|
||||
to_chat(summoner, "<span class='warning'>Your guardian has primed \the [A] to explode!</span>")
|
||||
|
||||
bomb_cooldown = world.time + 200
|
||||
B.spawner = src
|
||||
B.disguise (A)
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>Your powers are on cooldown! You must wait 20 seconds between bombs.</B></span>")
|
||||
|
||||
|
||||
/obj/item/weapon/guardian_bomb
|
||||
name = "bomb"
|
||||
desc = "You shouldn't be seeing this!"
|
||||
@@ -679,22 +628,18 @@
|
||||
if(src)
|
||||
stored_obj.loc = get_turf(src.loc)
|
||||
to_chat(spawner, "<span class='danger'><B>Failure! Your trap on \the [stored_obj] didn't catch anyone this time.</B></span>")
|
||||
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/guardian_bomb/proc/detonate(var/mob/living/user)
|
||||
to_chat(user, "<span class='danger'><B>The [src] was boobytrapped!</B></span>")
|
||||
|
||||
if(istype(spawner, /mob/living/simple_animal/hostile/guardian))
|
||||
var/mob/living/simple_animal/hostile/guardian/G = spawner
|
||||
if(user == G.summoner)
|
||||
to_chat(user, "<span class='danger'>You knew this because of your link with your guardian, so you smartly defuse the bomb.</span>")
|
||||
|
||||
stored_obj.loc = get_turf(src.loc)
|
||||
qdel(src)
|
||||
return
|
||||
to_chat(spawner, "<span class='danger'><B>Success! Your trap on \the [src] caught [user]!</B></span>")
|
||||
|
||||
stored_obj.loc = get_turf(src.loc)
|
||||
playsound(get_turf(src),'sound/effects/Explosion2.ogg', 200, 1)
|
||||
user.ex_act(2)
|
||||
@@ -714,7 +659,6 @@
|
||||
to_chat(user, "<span class='notice'>Looks odd!</span>")
|
||||
|
||||
|
||||
|
||||
////////Creation
|
||||
|
||||
/obj/item/weapon/guardiancreator
|
||||
@@ -736,19 +680,15 @@
|
||||
for(var/mob/living/simple_animal/hostile/guardian/G in living_mob_list)
|
||||
if (G.summoner == user)
|
||||
to_chat(user, "You already have a [mob_name]!")
|
||||
|
||||
return
|
||||
if(user.mind && user.mind.changeling)
|
||||
to_chat(user, "[ling_failure]")
|
||||
|
||||
return
|
||||
if(used == TRUE)
|
||||
to_chat(user, "[used_message]")
|
||||
|
||||
return
|
||||
used = TRUE
|
||||
to_chat(user, "[use_message]")
|
||||
|
||||
var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as the [mob_name] of [user.real_name]?", ROLE_GUARDIAN, 0, 100)
|
||||
var/mob/dead/observer/theghost = null
|
||||
|
||||
@@ -757,7 +697,6 @@
|
||||
spawn_guardian(user, theghost.key)
|
||||
else
|
||||
to_chat(user, "[failure_message]")
|
||||
|
||||
used = FALSE
|
||||
|
||||
|
||||
@@ -790,13 +729,9 @@
|
||||
G.summoned = TRUE
|
||||
G.key = key
|
||||
to_chat(G, "You are a [mob_name] bound to serve [user.real_name].")
|
||||
|
||||
to_chat(G, "You are capable of manifesting or recalling to your master with verbs in the Guardian tab. You will also find a verb to communicate with them privately there.")
|
||||
|
||||
to_chat(G, "While personally invincible, you will die if [user.real_name] does, and any damage dealt to you will have a portion passed on to them as you feed upon them to sustain yourself.")
|
||||
|
||||
to_chat(G, "[G.playstyle_string]")
|
||||
|
||||
G.faction = user.faction
|
||||
user.verbs += /mob/living/proc/guardian_comm
|
||||
user.verbs += /mob/living/proc/guardian_recall
|
||||
@@ -818,7 +753,6 @@
|
||||
G.icon_dead = "[theme][color]"
|
||||
|
||||
to_chat(user, "[G.magic_fluff_string].")
|
||||
|
||||
if("tech")
|
||||
color = pick("Rose", "Peony", "Lily", "Daisy", "Zinnia", "Ivy", "Iris", "Petunia", "Violet", "Lilac", "Orchid") //technically not colors, just flowers that can be specific colors
|
||||
picked_name = pick("Gallium", "Indium", "Thallium", "Bismuth", "Aluminium", "Mercury", "Iron", "Silver", "Zinc", "Titanium", "Chromium", "Nickel", "Platinum", "Tellurium", "Palladium", "Rhodium", "Cobalt", "Osmium", "Tungsten", "Iridium")
|
||||
@@ -830,13 +764,11 @@
|
||||
G.icon_dead = "[theme][color]"
|
||||
|
||||
to_chat(user, "[G.tech_fluff_string].")
|
||||
|
||||
G.speak_emote = list("states")
|
||||
if("bio")
|
||||
G.icon = 'icons/mob/mob.dmi'
|
||||
picked_name = pick("brood", "hive", "nest")
|
||||
to_chat(user, "[G.bio_fluff_string].")
|
||||
|
||||
G.name = "[picked_name] swarm"
|
||||
G.color = picked_color
|
||||
G.real_name = "[picked_name] swarm"
|
||||
|
||||
@@ -53,7 +53,6 @@
|
||||
..()
|
||||
if(get_dist(user,src)<=3)
|
||||
to_chat(user, "<span class='warning'>It doesn't look quite right...</span>")
|
||||
|
||||
else
|
||||
..()
|
||||
return
|
||||
@@ -83,7 +82,6 @@
|
||||
assume(A)
|
||||
else
|
||||
to_chat(src, "<span class='warning'>Your chameleon skin is still repairing itself!</span>")
|
||||
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/morph/proc/assume(atom/movable/target)
|
||||
|
||||
@@ -23,9 +23,7 @@
|
||||
player_mind.special_role = "Morph"
|
||||
ticker.mode.traitors |= player_mind
|
||||
to_chat(S, S.playstyle_string)
|
||||
|
||||
to_chat(S, 'sound/magic/Mutate.ogg')
|
||||
|
||||
message_admins("[key_of_morph] has been made into morph by an event.")
|
||||
log_game("[key_of_morph] was spawned as a morph by an event.")
|
||||
return 1
|
||||
|
||||
@@ -63,12 +63,10 @@
|
||||
incorporeal_move = 3
|
||||
invisibility = INVISIBILITY_REVENANT
|
||||
to_chat(src, "<span class='revenboldnotice'>You are once more concealed.</span>")
|
||||
|
||||
if(unstun_time && world.time >= unstun_time)
|
||||
unstun_time = 0
|
||||
notransform = 0
|
||||
to_chat(src, "<span class='revenboldnotice'>You can move again!</span>")
|
||||
|
||||
update_spooky_icon()
|
||||
|
||||
/mob/living/simple_animal/revenant/ex_act(severity)
|
||||
@@ -92,7 +90,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/revenant/say(message)
|
||||
if(!message)
|
||||
return
|
||||
@@ -101,10 +98,8 @@
|
||||
for(var/mob/M in mob_list)
|
||||
if(istype(M, /mob/living/simple_animal/revenant))
|
||||
to_chat(M, rendered)
|
||||
|
||||
if(isobserver(M))
|
||||
to_chat(M, "<a href='?src=\ref[M];follow=\ref[src]'>(F)</a> [rendered]")
|
||||
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/revenant/Stat()
|
||||
@@ -125,7 +120,6 @@
|
||||
if(src.mind)
|
||||
src.mind.wipe_memory()
|
||||
to_chat(src, 'sound/effects/ghost.ogg')
|
||||
|
||||
to_chat(src, "<br>")
|
||||
to_chat(src, "<span class='deadsay'><font size=3><b>You are a revenant.</b></font></span>")
|
||||
to_chat(src, "<b>Your formerly mundane spirit has been infused with alien energies and empowered into a revenant.</b>")
|
||||
@@ -135,17 +129,14 @@
|
||||
to_chat(src, "<b><i>You do not remember anything of your past lives, nor will you remember anything about this one after your death.</i></b>")
|
||||
to_chat(src, "<b>Be sure to read the wiki page at http://nanotrasen.se/wiki/index.php/Revenant to learn more.</b>")
|
||||
|
||||
|
||||
var/datum/objective/revenant/objective = new
|
||||
objective.owner = src.mind
|
||||
src.mind.objectives += objective
|
||||
to_chat(src, "<b>Objective #1</b>: [objective.explanation_text]")
|
||||
|
||||
var/datum/objective/revenantFluff/objective2 = new
|
||||
objective2.owner = src.mind
|
||||
src.mind.objectives += objective2
|
||||
to_chat(src, "<b>Objective #2</b>: [objective2.explanation_text]")
|
||||
|
||||
ticker.mode.traitors |= src.mind //Necessary for announcing
|
||||
if(!src.giveSpells())
|
||||
message_admins("Revenant was created but has no mind. Trying again in five seconds.")
|
||||
@@ -179,7 +170,6 @@
|
||||
updateallghostimages()
|
||||
|
||||
to_chat(src, "<span class='revendanger'>NO! No... it's too late, you can feel your essence breaking apart...</span>")
|
||||
|
||||
notransform = 1
|
||||
revealed = 1
|
||||
invisibility = 0
|
||||
@@ -216,15 +206,12 @@
|
||||
var/turf/T = get_turf(src)
|
||||
if(istype(T, /turf/simulated/wall))
|
||||
to_chat(src, "<span class='revenwarning'>You cannot use abilities from inside of a wall.</span>")
|
||||
|
||||
return 0
|
||||
if(src.inhibited)
|
||||
to_chat(src, "<span class='revenwarning'>Your powers have been suppressed by nulling energy!</span>")
|
||||
|
||||
return 0
|
||||
if(!src.change_essence_amount(essence_cost, 1))
|
||||
to_chat(src, "<span class='revenwarning'>You lack the essence to use that ability.</span>")
|
||||
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -239,10 +226,8 @@
|
||||
if(!silent)
|
||||
if(essence_amt > 0)
|
||||
to_chat(src, "<span class='revennotice'>Gained [essence_amt]E from [source].</span>")
|
||||
|
||||
else
|
||||
to_chat(src, "<span class='revenminor'>Lost [essence_amt]E from [source].</span>")
|
||||
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/revenant/proc/reveal(time)
|
||||
@@ -255,11 +240,9 @@
|
||||
incorporeal_move = 0
|
||||
if(!unreveal_time)
|
||||
to_chat(src, "<span class='revendanger'>You have been revealed!</span>")
|
||||
|
||||
unreveal_time = world.time + time
|
||||
else
|
||||
to_chat(src, "<span class='revenwarning'>You have been revealed!</span>")
|
||||
|
||||
unreveal_time = unreveal_time + time
|
||||
update_spooky_icon()
|
||||
|
||||
@@ -271,11 +254,9 @@
|
||||
notransform = 1
|
||||
if(!unstun_time)
|
||||
to_chat(src, "<span class='revendanger'>You cannot move!</span>")
|
||||
|
||||
unstun_time = world.time + time
|
||||
else
|
||||
to_chat(src, "<span class='revenwarning'>You cannot move!</span>")
|
||||
|
||||
unstun_time = unstun_time + time
|
||||
update_spooky_icon()
|
||||
|
||||
@@ -371,11 +352,9 @@
|
||||
..(user)
|
||||
if(inert)
|
||||
to_chat(user, "<span class='revennotice'>It seems inert.</span>")
|
||||
|
||||
else if(reforming)
|
||||
to_chat(user, "<span class='revenwarning'>It is shifting and distorted. It would be wise to destroy this.</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/ectoplasm/revenant/proc/reform()
|
||||
if(inert || !src)
|
||||
return
|
||||
|
||||
@@ -30,62 +30,46 @@
|
||||
return
|
||||
if(draining)
|
||||
to_chat(src, "<span class='revenwarning'>You are already siphoning the essence of a soul!</span>")
|
||||
|
||||
return
|
||||
if(target in drained_mobs)
|
||||
to_chat(src, "<span class='revenwarning'>[target]'s soul is dead and empty.</span>")
|
||||
|
||||
return
|
||||
if(!target.stat)
|
||||
to_chat(src, "<span class='revennotice'>This being's soul is too strong to harvest.</span>")
|
||||
|
||||
if(prob(10))
|
||||
to_chat(target, "You feel as if you are being watched.")
|
||||
|
||||
return
|
||||
draining = 1
|
||||
essence_drained = rand(15, 20)
|
||||
to_chat(src, "<span class='revennotice'>You search for the soul of [target].</span>")
|
||||
|
||||
if(do_after(src, 10, 0, target = target)) //did they get deleted in that second?
|
||||
if(target.ckey)
|
||||
to_chat(src, "<span class='revennotice'>Their soul burns with intelligence.</span>")
|
||||
|
||||
essence_drained += rand(20, 30)
|
||||
if(target.stat != DEAD)
|
||||
to_chat(src, "<span class='revennotice'>Their soul blazes with life!</span>")
|
||||
|
||||
essence_drained += rand(40, 50)
|
||||
else
|
||||
to_chat(src, "<span class='revennotice'>Their soul is weak and faltering.</span>")
|
||||
|
||||
if(do_after(src, 20, 0, target = target)) //did they get deleted NOW?
|
||||
switch(essence_drained)
|
||||
if(1 to 30)
|
||||
to_chat(src, "<span class='revennotice'>[target] will not yield much essence. Still, every bit counts.</span>")
|
||||
|
||||
if(30 to 70)
|
||||
to_chat(src, "<span class='revennotice'>[target] will yield an average amount of essence.</span>")
|
||||
|
||||
if(70 to 90)
|
||||
to_chat(src, "<span class='revenboldnotice'>Such a feast! [target] will yield much essence to you.</span>")
|
||||
|
||||
if(90 to INFINITY)
|
||||
to_chat(src, "<span class='revenbignotice'>Ah, the perfect soul. [target] will yield massive amounts of essence to you.</span>")
|
||||
|
||||
if(do_after(src, 20, 0, target = target)) //how about now
|
||||
if(!target.stat)
|
||||
to_chat(src, "<span class='revenwarning'>They are now powerful enough to fight off your draining.</span>")
|
||||
|
||||
to_chat(target, "<span class='boldannounce'>You feel something tugging across your body before subsiding.</span>")
|
||||
|
||||
draining = 0
|
||||
return //hey, wait a minute...
|
||||
to_chat(src, "<span class='revenminor'>You begin siphoning essence from [target]'s soul.</span>")
|
||||
|
||||
if(target.stat != DEAD)
|
||||
to_chat(target, "<span class='warning'>You feel a horribly unpleasant draining sensation as your grip on life weakens...</span>")
|
||||
|
||||
icon_state = "revenant_draining"
|
||||
reveal(27)
|
||||
stun(27)
|
||||
@@ -97,16 +81,13 @@
|
||||
essence_regen_cap += 25
|
||||
perfectsouls += 1
|
||||
to_chat(src, "<span class='revenboldnotice'>The perfection of [target]'s soul has increased your maximum essence level. Your new maximum essence is [essence_regen_cap].</span>")
|
||||
|
||||
to_chat(src, "<span class='revennotice'>[target]'s soul has been considerably weakened and will yield no more essence for the time being.</span>")
|
||||
|
||||
target.visible_message("<span class='warning'>[target] slumps onto the ground.</span>", \
|
||||
"<span class='revenwarning'>Violets lights, dancing in your vision, getting clo--</span>")
|
||||
drained_mobs.Add(target)
|
||||
target.death(0)
|
||||
else
|
||||
to_chat(src, "<span class='revenwarning'>[target ? "[target] has":"They have"] been drawn out of your grasp. The link has been broken.</span>")
|
||||
|
||||
draining = 0
|
||||
essence_drained = 0
|
||||
if(target) //Wait, target is WHERE NOW?
|
||||
@@ -115,7 +96,6 @@
|
||||
return
|
||||
else
|
||||
to_chat(src, "<span class='revenwarning'>You are not close enough to siphon [target ? "[target]'s":"their"] soul. The link has been broken.</span>")
|
||||
|
||||
draining = 0
|
||||
essence_drained = 0
|
||||
return
|
||||
@@ -153,11 +133,9 @@
|
||||
return
|
||||
log_say("RevenantTransmit: [key_name(user)]->[key_name(M)] : [msg]")
|
||||
to_chat(usr, "<span class='revennotice'><b>You transmit to [M]:</b> [msg]</span>")
|
||||
|
||||
to_chat(M, "<span class='revennotice'><b>An alien voice resonates from all around...</b></span><i> [msg]</I>")
|
||||
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/revenant
|
||||
clothes_req = 0
|
||||
action_background_icon_state = "bg_revenant"
|
||||
@@ -195,7 +173,6 @@
|
||||
return 0
|
||||
name = "[initial(name)] ([cast_amount]E)"
|
||||
to_chat(user, "<span class='revennotice'>You have unlocked [initial(name)]!</span>")
|
||||
|
||||
panel = "Revenant Abilities"
|
||||
locked = 0
|
||||
charge_counter = charge_max
|
||||
@@ -272,7 +249,6 @@
|
||||
new/obj/effect/overlay/temp/revenant(T)
|
||||
for(var/mob/living/carbon/human/human in T.contents)
|
||||
to_chat(human, "<span class='warning'>You suddenly feel [pick("sick and tired", "tired and confused", "nauseated", "dizzy")].</span>")
|
||||
|
||||
human.adjustStaminaLoss(stamdamage)
|
||||
human.adjustToxLoss(toxdamage)
|
||||
human.confused += confusion
|
||||
@@ -323,7 +299,6 @@
|
||||
bot.emag_act(null)
|
||||
for(var/mob/living/carbon/human/human in T.contents)
|
||||
to_chat(human, "<span class='warning'>You feel [pick("your sense of direction flicker out", "a stabbing pain in your head", "your mind fill with static")].</span>")
|
||||
|
||||
new/obj/effect/overlay/temp/revenant(human.loc)
|
||||
human.emp_act(1)
|
||||
for(var/obj/thing in T.contents)
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
var/mob/living/carbon/C = src
|
||||
if(C.l_hand || C.r_hand)
|
||||
to_chat(C, "<span class='warning'>You may not hold items while blood crawling!</span>")
|
||||
|
||||
return 0
|
||||
var/obj/item/weapon/bloodcrawl/B1 = new(C)
|
||||
var/obj/item/weapon/bloodcrawl/B2 = new(C)
|
||||
@@ -56,7 +55,6 @@
|
||||
|
||||
if(kidnapped)
|
||||
to_chat(src, "<B>You begin to feast on [kidnapped]. You can not move while you are doing this.</B>")
|
||||
|
||||
visible_message("<span class='warning'><B>Loud eating sounds come from the blood...</B></span>")
|
||||
sleep(6)
|
||||
if(animation)
|
||||
@@ -66,7 +64,6 @@
|
||||
sleep(30)
|
||||
if(kidnapped)
|
||||
to_chat(src, "<B>You devour [kidnapped]. Your health is fully restored.</B>")
|
||||
|
||||
adjustBruteLoss(-1000)
|
||||
adjustFireLoss(-1000)
|
||||
adjustOxyLoss(-1000)
|
||||
@@ -77,7 +74,6 @@
|
||||
var/mob/living/simple_animal/slaughter/demon = src
|
||||
demon.devoured++
|
||||
to_chat(kidnapped, "<span class='userdanger'>You feel teeth sink into your flesh, and the--</span>")
|
||||
|
||||
kidnapped.adjustBruteLoss(1000)
|
||||
kidnapped.forceMove(src)
|
||||
demon.consumed_mobs.Add(kidnapped)
|
||||
@@ -86,7 +82,6 @@
|
||||
qdel(kidnapped)
|
||||
else
|
||||
to_chat(src, "<span class='danger'>You happily devour... nothing? Your meal vanished at some point!</span>")
|
||||
|
||||
else
|
||||
sleep(6)
|
||||
if (animation)
|
||||
@@ -104,7 +99,6 @@
|
||||
|
||||
if(notransform)
|
||||
to_chat(src, "<span class='warning'>Finish eating first!</span>")
|
||||
|
||||
return 0
|
||||
B.visible_message("<span class='warning'>[B] starts to bubble...</span>")
|
||||
if(!do_after(src, 20, target = B))
|
||||
|
||||
@@ -56,11 +56,8 @@
|
||||
bloodspell.phased = 1
|
||||
if(mind)
|
||||
to_chat(src, src.playstyle_string)
|
||||
|
||||
to_chat(src, "<B><span class ='notice'>You are not currently in the same plane of existence as the station. Ctrl+Click a blood pool to manifest.</span></B>")
|
||||
|
||||
to_chat(src, 'sound/misc/demon_dies.ogg')
|
||||
|
||||
mind.current.verbs += /mob/living/simple_animal/slaughter/proc/slaughterWhisper
|
||||
if(!(vialspawned))
|
||||
var/datum/objective/slaughter/objective = new
|
||||
@@ -72,11 +69,9 @@
|
||||
mind.objectives += objective
|
||||
mind.objectives += fluffObjective
|
||||
to_chat(src, "<B>Objective #[1]</B>: [objective.explanation_text]")
|
||||
|
||||
to_chat(src, "<B>Objective #[2]</B>: [fluffObjective.explanation_text]")
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/slaughter/Life()
|
||||
..()
|
||||
if(boost<world.time)
|
||||
@@ -131,9 +126,7 @@
|
||||
return
|
||||
log_say("Slaughter Demon Transmit: [key_name(usr)]->[key_name(M)]: [msg]")
|
||||
to_chat(usr, "<span class='info'><b>You whisper to [M]: </b>[msg]</span>")
|
||||
|
||||
to_chat(M, "<span class='deadsay'><b>Suddenly a strange, demonic voice resonates in your head... </b></span><i><span class='danger'> [msg]</span></I>")
|
||||
|
||||
for(var/mob/dead/observer/G in player_list)
|
||||
G.show_message("<i>Demonic message from <b>[usr]</b> ([ghost_follow_link(usr, ghost=G)]) to <b>[M]</b> ([ghost_follow_link(M, ghost=G)]): [msg]</i>")
|
||||
|
||||
@@ -169,12 +162,10 @@
|
||||
user.bloodcrawl = BLOODCRAWL
|
||||
else if(user.bloodcrawl == BLOODCRAWL)
|
||||
to_chat(user, "You feel diffr-<span class = 'danger'> CONSUME THEM! </span>")
|
||||
|
||||
user.bloodcrawl = BLOODCRAWL_EAT
|
||||
else
|
||||
to_chat(user, "<span class='warning'>...and you don't feel any different.</span>")
|
||||
|
||||
|
||||
user.drop_item()
|
||||
insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E
|
||||
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
/obj/machinery/emergency_authentication_device/attack_hand(mob/user)
|
||||
if(activated)
|
||||
to_chat(user, "\blue \The [src] is already active!")
|
||||
|
||||
return
|
||||
|
||||
if(!mode.current_directive.directives_complete())
|
||||
@@ -57,7 +56,6 @@
|
||||
if(captains_key && secondary_key)
|
||||
activated = 1
|
||||
to_chat(user, "\blue You activate \the [src]!")
|
||||
|
||||
state("Command acknowledged. Initiating quantum entanglement relay to Nanotrasen High Command.")
|
||||
launch_shuttle()
|
||||
return
|
||||
@@ -80,7 +78,6 @@
|
||||
/obj/machinery/emergency_authentication_device/attackby(obj/item/weapon/O, mob/user, params)
|
||||
if(activated)
|
||||
to_chat(user, "\blue \The [src] is already active!")
|
||||
|
||||
return
|
||||
|
||||
if(!mode.current_directive.directives_complete())
|
||||
|
||||
@@ -15,27 +15,21 @@
|
||||
target = mutiny.captains_key
|
||||
point_at(target)
|
||||
to_chat(usr, "\blue You calibrate \the [src] to locate the Captain's Authentication Key.")
|
||||
|
||||
if (1)
|
||||
mode = 2
|
||||
target = mutiny.secondary_key
|
||||
to_chat(usr, "\blue You calibrate \the [src] to locate the Emergency Secondary Authentication Key.")
|
||||
|
||||
else
|
||||
mode = 0
|
||||
active = 0
|
||||
icon_state = "pinoff"
|
||||
to_chat(usr, "\blue You switch \the [src] off.")
|
||||
|
||||
|
||||
/obj/item/weapon/pinpointer/advpinpointer/auth_key/examine(mob/user)
|
||||
switch(mode)
|
||||
if (1)
|
||||
to_chat(user, "Is is calibrated for the Captain's Authentication Key.")
|
||||
|
||||
if (2)
|
||||
to_chat(user, "It is calibrated for the Emergency Secondary Authentication Key.")
|
||||
|
||||
else
|
||||
to_chat(user, "It is switched off.")
|
||||
|
||||
|
||||
@@ -92,7 +92,6 @@ datum/game_mode/mutiny
|
||||
for(var/T in subtypesof(/datum/directive))
|
||||
var/datum/directive/D = new T(src)
|
||||
// to_chat(world, D.name)
|
||||
|
||||
if (D.meets_prerequisites())
|
||||
candidates+=D
|
||||
return candidates
|
||||
@@ -128,7 +127,6 @@ datum/game_mode/mutiny
|
||||
proc/equip_head(datum/mind/head, faction, proc/recruitment_verb)
|
||||
var/mob/living/carbon/human/H = head.current
|
||||
to_chat(H, "You are the Head [capitalize(faction)]!")
|
||||
|
||||
head.special_role = "head_[faction]"
|
||||
|
||||
var/slots = get_equipment_slots()
|
||||
@@ -154,9 +152,7 @@ datum/game_mode/mutiny
|
||||
proc/add_faction(datum/mind/M, faction, list/faction_list)
|
||||
if(!can_be_recruited(M, faction))
|
||||
to_chat(M.current, "\red Recruitment canceled; your role has already changed.")
|
||||
|
||||
to_chat(head_mutineer.current, "\red Could not recruit [M]. Their role has changed.")
|
||||
|
||||
return
|
||||
|
||||
if(M in loyalists)
|
||||
@@ -170,15 +166,11 @@ datum/game_mode/mutiny
|
||||
|
||||
if(faction == "mutineer")
|
||||
to_chat(M.current, fluff.mutineer_tag("You have joined the mutineers!"))
|
||||
|
||||
to_chat(head_mutineer.current, fluff.mutineer_tag("[M] has joined the mutineers!"))
|
||||
|
||||
else
|
||||
to_chat(M.current, fluff.loyalist_tag("You have joined the loyalists!"))
|
||||
|
||||
to_chat(head_loyalist.current, fluff.loyalist_tag("[M] has joined the loyalists!"))
|
||||
|
||||
|
||||
update_icon(M)
|
||||
|
||||
proc/was_bloodbath()
|
||||
@@ -220,30 +212,23 @@ datum/game_mode/mutiny
|
||||
|
||||
proc/round_outcome()
|
||||
to_chat(world, "<center><h4>Breaking News</h4></center><br><hr>")
|
||||
|
||||
if (was_bloodbath())
|
||||
to_chat(world, fluff.no_victory())
|
||||
|
||||
return
|
||||
|
||||
var/directives_completed = current_directive.directives_complete()
|
||||
var/ead_activated = ead.activated
|
||||
if (directives_completed && ead_activated)
|
||||
to_chat(world, fluff.loyalist_major_victory())
|
||||
|
||||
else if (directives_completed && !ead_activated)
|
||||
to_chat(world, fluff.loyalist_minor_victory())
|
||||
|
||||
else if (!directives_completed && ead_activated)
|
||||
to_chat(world, fluff.mutineer_minor_victory())
|
||||
|
||||
else if (!directives_completed && !ead_activated)
|
||||
to_chat(world, fluff.mutineer_major_victory())
|
||||
|
||||
|
||||
to_chat(world, sound('sound/machines/twobeep.ogg'))
|
||||
|
||||
|
||||
proc/update_all_icons()
|
||||
spawn(0)
|
||||
for(var/datum/mind/M in mutineers)
|
||||
@@ -282,19 +267,16 @@ datum/game_mode/mutiny
|
||||
var/list/loyalist_candidates = get_head_loyalist_candidates()
|
||||
if(!loyalist_candidates || loyalist_candidates.len == 0)
|
||||
to_chat(world, "\red Mutiny mode aborted: no valid candidates for head loyalist.")
|
||||
|
||||
return 0
|
||||
|
||||
var/list/mutineer_candidates = get_head_mutineer_candidates()
|
||||
if(!mutineer_candidates || mutineer_candidates.len == 0)
|
||||
to_chat(world, "\red Mutiny mode aborted: no valid candidates for head mutineer.")
|
||||
|
||||
return 0
|
||||
|
||||
var/list/directive_candidates = get_directive_candidates()
|
||||
if(!directive_candidates || directive_candidates.len == 0)
|
||||
to_chat(world, "\red Mutiny mode aborted: no valid candidates for Directive X.")
|
||||
|
||||
return 0
|
||||
|
||||
head_loyalist = pick(loyalist_candidates)
|
||||
@@ -335,12 +317,10 @@ datum/game_mode/mutiny
|
||||
|
||||
if(!candidates.len)
|
||||
to_chat(src, "\red You aren't close enough to anybody that can be recruited.")
|
||||
|
||||
return
|
||||
|
||||
if(world.time < mode.recruit_loyalist_cooldown)
|
||||
to_chat(src, "\red Wait [MUTINY_RECRUITMENT_COOLDOWN] seconds before recruiting again.")
|
||||
|
||||
return
|
||||
|
||||
mode.recruit_loyalist_cooldown = world.time + (MUTINY_RECRUITMENT_COOLDOWN SECONDS)
|
||||
@@ -349,7 +329,6 @@ datum/game_mode/mutiny
|
||||
|
||||
if (M)
|
||||
to_chat(src, "Attempting to recruit [M]...")
|
||||
|
||||
log_admin("[key_name(src)] attempted to recruit [M] as a loyalist.")
|
||||
message_admins("\red [key_name_admin(src)] attempted to recruit [M] as a loyalist.")
|
||||
|
||||
@@ -358,10 +337,8 @@ datum/game_mode/mutiny
|
||||
mode.add_loyalist(M.mind)
|
||||
else if(choice == "No")
|
||||
to_chat(M, "\red You declined to join the loyalists.")
|
||||
|
||||
to_chat(mode.head_loyalist.current, "\red <b>[M] declined to support the loyalists.</b>")
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/recruit_mutineer()
|
||||
set name = "Recruit Mutineer"
|
||||
set category = "Mutiny"
|
||||
@@ -377,12 +354,10 @@ datum/game_mode/mutiny
|
||||
|
||||
if(!candidates.len)
|
||||
to_chat(src, "\red You aren't close enough to anybody that can be recruited.")
|
||||
|
||||
return
|
||||
|
||||
if(world.time < mode.recruit_mutineer_cooldown)
|
||||
to_chat(src, "\red Wait [MUTINY_RECRUITMENT_COOLDOWN] seconds before recruiting again.")
|
||||
|
||||
return
|
||||
|
||||
mode.recruit_mutineer_cooldown = world.time + (MUTINY_RECRUITMENT_COOLDOWN SECONDS)
|
||||
@@ -391,7 +366,6 @@ datum/game_mode/mutiny
|
||||
|
||||
if (M)
|
||||
to_chat(src, "Attempting to recruit [M]...")
|
||||
|
||||
log_admin("[key_name(src)] attempted to recruit [M] as a mutineer.")
|
||||
message_admins("\red [key_name_admin(src)] attempted to recruit [M] as a mutineer.")
|
||||
|
||||
@@ -400,10 +374,8 @@ datum/game_mode/mutiny
|
||||
mode.add_mutineer(M.mind)
|
||||
else if(choice == "No")
|
||||
to_chat(M, "\red You declined to join the mutineers.")
|
||||
|
||||
to_chat(mode.head_mutineer.current, "\red <b>[M] declined to support the mutineers.</b>")
|
||||
|
||||
|
||||
/proc/get_mutiny_mode()
|
||||
if(!ticker || !istype(ticker.mode, /datum/game_mode/mutiny))
|
||||
return null
|
||||
|
||||
@@ -73,7 +73,6 @@ Be safe, friend.\" (Unable to Reply)</p>"}
|
||||
|
||||
proc/announce()
|
||||
to_chat(world, "<B>The current game mode is - Mutiny!</B>")
|
||||
|
||||
to_chat(world, {"
|
||||
<p>The crew will be divided by their sense of ethics when a morally turbulent emergency directive arrives with an incomplete command validation code.<br><br>
|
||||
The [loyalist_tag("Head Loyalist")] is the Captain, who carries the [loyalist_tag("Captain's Authentication Key")] at all times.<br>
|
||||
|
||||
@@ -20,7 +20,6 @@ datum/game_mode/nations
|
||||
if(!istype(M,/mob/new_player))
|
||||
to_chat(M, sound('sound/effects/purge_siren.ogg'))
|
||||
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/game_mode/nations/proc/send_intercept()
|
||||
@@ -44,10 +43,8 @@ datum/game_mode/nations
|
||||
if(H.mind.assigned_role == H.mind.nation.default_leader)
|
||||
H.mind.nation.current_leader = H.mind.current
|
||||
to_chat(H, "You have been chosen to lead the nation of [H.mind.nation.default_name]!")
|
||||
|
||||
continue
|
||||
to_chat(H, "You are now part of the great sovereign nation of [H.mind.nation.default_name]!")
|
||||
|
||||
continue
|
||||
|
||||
if(H.mind.assigned_role in medical_positions)
|
||||
@@ -57,10 +54,8 @@ datum/game_mode/nations
|
||||
if(H.mind.assigned_role == H.mind.nation.default_leader)
|
||||
H.mind.nation.current_leader = H.mind.current
|
||||
to_chat(H, "You have been chosen to lead the nation of [H.mind.nation.default_name]!")
|
||||
|
||||
continue
|
||||
to_chat(H, "You are now part of the great sovereign nation of [H.mind.nation.default_name]!")
|
||||
|
||||
continue
|
||||
|
||||
if(H.mind.assigned_role in science_positions)
|
||||
@@ -70,10 +65,8 @@ datum/game_mode/nations
|
||||
if(H.mind.assigned_role == H.mind.nation.default_leader)
|
||||
H.mind.nation.current_leader = H.mind.current
|
||||
to_chat(H, "You have been chosen to lead the nation of [H.mind.nation.default_name]!")
|
||||
|
||||
continue
|
||||
to_chat(H, "You are now part of the great sovereign nation of [H.mind.nation.default_name]!")
|
||||
|
||||
continue
|
||||
|
||||
if(H.mind.assigned_role in security_positions)
|
||||
@@ -83,10 +76,8 @@ datum/game_mode/nations
|
||||
if(H.mind.assigned_role == H.mind.nation.default_leader)
|
||||
H.mind.nation.current_leader = H.mind.current
|
||||
to_chat(H, "You have been chosen to lead the nation of [H.mind.nation.default_name]!")
|
||||
|
||||
continue
|
||||
to_chat(H, "You are now part of the great sovereign nation of [H.mind.nation.default_name]!")
|
||||
|
||||
continue
|
||||
|
||||
if(H.mind.assigned_role in cargonians)
|
||||
@@ -96,10 +87,8 @@ datum/game_mode/nations
|
||||
if(H.mind.assigned_role == H.mind.nation.default_leader)
|
||||
H.mind.nation.current_leader = H.mind.current
|
||||
to_chat(H, "You have been chosen to lead the nation of [H.mind.nation.default_name]!")
|
||||
|
||||
continue
|
||||
to_chat(H, "You are now part of the great sovereign nation of [H.mind.nation.default_name]!")
|
||||
|
||||
continue
|
||||
|
||||
if(H.mind.assigned_role in servicion)
|
||||
@@ -109,10 +98,8 @@ datum/game_mode/nations
|
||||
if(H.mind.assigned_role == H.mind.nation.default_leader)
|
||||
H.mind.nation.current_leader = H.mind.current
|
||||
to_chat(H, "You have been chosen to lead the nation of [H.mind.nation.default_name]!")
|
||||
|
||||
continue
|
||||
to_chat(H, "You are now part of the great sovereign nation of [H.mind.nation.default_name]!")
|
||||
|
||||
continue
|
||||
|
||||
if(H.mind.assigned_role in (support_positions + command_positions))
|
||||
@@ -122,15 +109,12 @@ datum/game_mode/nations
|
||||
if(H.mind.assigned_role == H.mind.nation.default_leader)
|
||||
H.mind.nation.current_leader = H.mind.current
|
||||
to_chat(H, "You have been chosen to lead the nation of [H.mind.nation.default_name]!")
|
||||
|
||||
continue
|
||||
to_chat(H, "You are now part of the great sovereign nation of [H.mind.nation.default_name]!")
|
||||
|
||||
continue
|
||||
|
||||
if(H.mind.assigned_role in civilian_positions)
|
||||
to_chat(H, "You do not belong to any nation and are free to sell your services to the highest bidder.")
|
||||
|
||||
continue
|
||||
|
||||
else
|
||||
@@ -170,7 +154,6 @@ datum/game_mode/nations
|
||||
if(!N.current_leader && N.membership.len)
|
||||
N.current_leader = pick(N.membership)
|
||||
to_chat(N.current_leader, "You have been chosen to lead the nation of [N.current_name]!")
|
||||
|
||||
if(N.current_leader)
|
||||
var/mob/living/carbon/human/H = N.current_leader
|
||||
H.verbs += /mob/living/carbon/human/proc/set_nation_name
|
||||
@@ -195,7 +178,6 @@ datum/game_mode/nations
|
||||
mode.update_nations_icons_added(H,"atmosia")
|
||||
H.mind.nation.membership += H.mind.current
|
||||
to_chat(H, "You are now part of the great sovereign nation of [H.mind.nation.current_name]!")
|
||||
|
||||
return 1
|
||||
|
||||
if(H.mind.assigned_role in medical_positions)
|
||||
@@ -203,7 +185,6 @@ datum/game_mode/nations
|
||||
mode.update_nations_icons_added(H,"hudmedistan")
|
||||
H.mind.nation.membership += H.mind.current
|
||||
to_chat(H, "You are now part of the great sovereign nation of [H.mind.nation.current_name]!")
|
||||
|
||||
return 1
|
||||
|
||||
if(H.mind.assigned_role in science_positions)
|
||||
@@ -211,7 +192,6 @@ datum/game_mode/nations
|
||||
mode.update_nations_icons_added(H,"hudscientopia")
|
||||
H.mind.nation.membership += H.mind.current
|
||||
to_chat(H, "You are now part of the great sovereign nation of [H.mind.nation.current_name]!")
|
||||
|
||||
return 1
|
||||
|
||||
if(H.mind.assigned_role in security_positions)
|
||||
@@ -219,7 +199,6 @@ datum/game_mode/nations
|
||||
mode.update_nations_icons_added(H,"hudbrigston")
|
||||
H.mind.nation.membership += H.mind.current
|
||||
to_chat(H, "You are now part of the great sovereign nation of [H.mind.nation.current_name]!")
|
||||
|
||||
return 1
|
||||
|
||||
if(H.mind.assigned_role in mode.cargonians)
|
||||
@@ -227,7 +206,6 @@ datum/game_mode/nations
|
||||
mode.update_nations_icons_added(H,"hudcargonia")
|
||||
H.mind.nation.membership += H.mind.current
|
||||
to_chat(H, "You are now part of the great sovereign nation of [H.mind.nation.current_name]!")
|
||||
|
||||
return 1
|
||||
|
||||
if(H.mind.assigned_role in mode.servicion)
|
||||
@@ -235,7 +213,6 @@ datum/game_mode/nations
|
||||
mode.update_nations_icons_added(H,"hudservice")
|
||||
H.mind.nation.membership += H.mind.current
|
||||
to_chat(H, "You are now part of the great sovereign nation of [H.mind.nation.current_name]!")
|
||||
|
||||
return 1
|
||||
|
||||
if(H.mind.assigned_role in (support_positions + command_positions))
|
||||
@@ -243,12 +220,10 @@ datum/game_mode/nations
|
||||
mode.update_nations_icons_added(H,"hudcommand")
|
||||
H.mind.nation.membership += H.mind.current
|
||||
to_chat(H, "You are now part of the great sovereign nation of [H.mind.nation.current_name]!")
|
||||
|
||||
return 1
|
||||
|
||||
if(H.mind.assigned_role in civilian_positions)
|
||||
to_chat(H, "You do not belong to any nation and are free to sell your services to the highest bidder.")
|
||||
|
||||
return 1
|
||||
|
||||
if(H.mind.assigned_role == "AI")
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
H.mind.nation.current_name = input
|
||||
H.mind.nation.update_nation_id()
|
||||
to_chat(H, "You rename your nation to [input].")
|
||||
|
||||
H.verbs -= /mob/living/carbon/human/proc/set_nation_name
|
||||
return 1
|
||||
|
||||
@@ -46,7 +45,6 @@
|
||||
H.mind.nation.member_rank = input
|
||||
H.mind.nation.update_nation_id()
|
||||
to_chat(H, "You changed the [type] rank of your nation to [input].")
|
||||
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/choose_heir()
|
||||
@@ -67,15 +65,12 @@
|
||||
if(H.mind.nation.heir)
|
||||
var/mob/living/carbon/human/oldheir = H.mind.nation.heir
|
||||
to_chat(oldheir, "You are no longer the heir to your nation!")
|
||||
|
||||
oldheir.verbs -= /mob/living/carbon/human/proc/takeover
|
||||
var/mob/living/carbon/human/newheir = heir
|
||||
H.mind.nation.heir = newheir
|
||||
newheir.verbs += /mob/living/carbon/human/proc/takeover
|
||||
to_chat(newheir, "You have been selected to be the heir to your nation's leadership!")
|
||||
|
||||
to_chat(H, "You have selected [heir] to be your heir!")
|
||||
|
||||
H.mind.nation.update_nation_id()
|
||||
|
||||
|
||||
@@ -96,7 +91,6 @@
|
||||
if(confirmation == "Yes")
|
||||
var/mob/living/carbon/human/oldleader = H.mind.nation.current_leader
|
||||
to_chat(oldleader, "You have been replaced by [H.name] as the leader of [H.mind.nation.current_name]!")
|
||||
|
||||
oldleader.verbs -= /mob/living/carbon/human/proc/set_nation_name
|
||||
oldleader.verbs -= /mob/living/carbon/human/proc/set_ranks
|
||||
oldleader.verbs -= /mob/living/carbon/human/proc/choose_heir
|
||||
@@ -107,7 +101,6 @@
|
||||
H.verbs += /mob/living/carbon/human/proc/set_ranks
|
||||
H.verbs += /mob/living/carbon/human/proc/choose_heir
|
||||
to_chat(H, "You have replaced [oldleader.name] as the leader of [H.mind.nation.current_name]!")
|
||||
|
||||
H.mind.nation.update_nation_id()
|
||||
|
||||
|
||||
|
||||
@@ -177,7 +177,6 @@
|
||||
continue
|
||||
var/datum/objective/assassinate/objective = pickweight(killobjectives)
|
||||
to_chat(world, objective)
|
||||
|
||||
for(1 to 10)
|
||||
if(objective.points + total_weight <= 100 || !killobjectives.len)
|
||||
break
|
||||
|
||||
@@ -24,12 +24,9 @@ proc/issyndicate(mob/living/M as mob)
|
||||
|
||||
/datum/game_mode/nuclear/announce()
|
||||
to_chat(world, "<B>The current game mode is - Nuclear Emergency!</B>")
|
||||
|
||||
to_chat(world, "<B>A [syndicate_name()] Strike Force is approaching [station_name()]!</B>")
|
||||
|
||||
to_chat(world, "A nuclear explosive was being transported by Nanotrasen to a military base. The transport ship mysteriously lost contact with Space Traffic Control (STC). About that time a strange disk was discovered around [station_name()]. It was identified by Nanotrasen as a nuclear authentication disk and now Syndicate Operatives have arrived to retake the disk and detonate SS13! There are most likely Syndicate starships are in the vicinity, so take care not to lose the disk!\n<B>Syndicate</B>: Reclaim the disk and detonate the nuclear bomb anywhere on SS13.\n<B>Personnel</B>: Hold the disk and <B>escape with the disk</B> on the shuttle!")
|
||||
|
||||
|
||||
/datum/game_mode/nuclear/can_start()//This could be better, will likely have to recode it later
|
||||
if(!..())
|
||||
return 0
|
||||
@@ -175,12 +172,9 @@ proc/issyndicate(mob/living/M as mob)
|
||||
*/
|
||||
synd_mind.current.real_name = "[syndicate_name()] Team [leader_title]"
|
||||
to_chat(synd_mind.current, "<B>You are the Syndicate leader for this mission. You are responsible for the distribution of telecrystals and your ID is the only one who can open the launch bay doors.</B>")
|
||||
|
||||
to_chat(synd_mind.current, "<B>If you feel you are not up to this task, give your ID to another operative.</B>")
|
||||
|
||||
to_chat(synd_mind.current, "<B>In your hand you will find a special item capable of triggering a greater challenge for your team. Examine it carefully and consult with your fellow operatives before activating it.</B>")
|
||||
|
||||
|
||||
var/obj/item/device/nuclear_challenge/challenge = new /obj/item/device/nuclear_challenge
|
||||
synd_mind.current.equip_to_slot_or_del(challenge, slot_r_hand)
|
||||
|
||||
@@ -197,7 +191,6 @@ proc/issyndicate(mob/living/M as mob)
|
||||
if (nuke_code)
|
||||
synd_mind.store_memory("<B>Syndicate Nuclear Bomb Code</B>: [nuke_code]", 0, 0)
|
||||
to_chat(synd_mind.current, "The nuclear authorization code is: <B>[nuke_code]</B>")
|
||||
|
||||
var/obj/item/weapon/paper/P = new
|
||||
P.info = "The nuclear authorization code is: <b>[nuke_code]</b>"
|
||||
P.name = "nuclear bomb code"
|
||||
@@ -227,11 +220,9 @@ proc/issyndicate(mob/living/M as mob)
|
||||
/datum/game_mode/proc/greet_syndicate(var/datum/mind/syndicate, var/you_are=1)
|
||||
if (you_are)
|
||||
to_chat(syndicate.current, "\blue You are a [syndicate_name()] agent!")
|
||||
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/objective in syndicate.objectives)
|
||||
to_chat(syndicate.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
|
||||
obj_count++
|
||||
return
|
||||
|
||||
@@ -325,66 +316,48 @@ proc/issyndicate(mob/living/M as mob)
|
||||
if (!disk_rescued && station_was_nuked && !syndies_didnt_escape)
|
||||
feedback_set_details("round_end_result","win - syndicate nuke")
|
||||
to_chat(world, "<FONT size = 3><B>Syndicate Major Victory!</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>[syndicate_name()] operatives have destroyed [station_name()]!</B>")
|
||||
|
||||
|
||||
else if (!disk_rescued && station_was_nuked && syndies_didnt_escape)
|
||||
feedback_set_details("round_end_result","halfwin - syndicate nuke - did not evacuate in time")
|
||||
to_chat(world, "<FONT size = 3><B>Total Annihilation</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>[syndicate_name()] operatives destroyed [station_name()] but did not leave the area in time and got caught in the explosion.</B> Next time, don't lose the disk!")
|
||||
|
||||
|
||||
else if (!disk_rescued && !station_was_nuked && nuke_off_station && !syndies_didnt_escape)
|
||||
feedback_set_details("round_end_result","halfwin - blew wrong station")
|
||||
to_chat(world, "<FONT size = 3><B>Crew Minor Victory</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>[syndicate_name()] operatives secured the authentication disk but blew up something that wasn't [station_name()].</B> Next time, don't lose the disk!")
|
||||
|
||||
|
||||
else if (!disk_rescued && !station_was_nuked && nuke_off_station && syndies_didnt_escape)
|
||||
feedback_set_details("round_end_result","halfwin - blew wrong station - did not evacuate in time")
|
||||
to_chat(world, "<FONT size = 3><B>[syndicate_name()] operatives have earned Darwin Award!</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>[syndicate_name()] operatives blew up something that wasn't [station_name()] and got caught in the explosion.</B> Next time, don't lose the disk!")
|
||||
|
||||
|
||||
else if ( disk_rescued && is_operatives_are_dead())
|
||||
feedback_set_details("round_end_result","loss - evacuation - disk secured - syndi team dead")
|
||||
to_chat(world, "<FONT size = 3><B>Crew Major Victory!</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>The Research Staff has saved the disc and killed the [syndicate_name()] Operatives</B>")
|
||||
|
||||
|
||||
else if ( disk_rescued )
|
||||
feedback_set_details("round_end_result","loss - evacuation - disk secured")
|
||||
to_chat(world, "<FONT size = 3><B>Crew Major Victory</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>The Research Staff has saved the disc and stopped the [syndicate_name()] Operatives!</B>")
|
||||
|
||||
|
||||
else if (!disk_rescued && is_operatives_are_dead())
|
||||
feedback_set_details("round_end_result","loss - evacuation - disk not secured")
|
||||
to_chat(world, "<FONT size = 3><B>Syndicate Minor Victory!</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>The Research Staff failed to secure the authentication disk but did manage to kill most of the [syndicate_name()] Operatives!</B>")
|
||||
|
||||
|
||||
else if (!disk_rescued && crew_evacuated)
|
||||
feedback_set_details("round_end_result","halfwin - detonation averted")
|
||||
to_chat(world, "<FONT size = 3><B>Syndicate Minor Victory!</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>[syndicate_name()] operatives recovered the abandoned authentication disk but detonation of [station_name()] was averted.</B> Next time, don't lose the disk!")
|
||||
|
||||
|
||||
else if (!disk_rescued && !crew_evacuated)
|
||||
feedback_set_details("round_end_result","halfwin - interrupted")
|
||||
to_chat(world, "<FONT size = 3><B>Neutral Victory</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>Round was mysteriously interrupted!</B>")
|
||||
|
||||
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -422,7 +395,6 @@ proc/issyndicate(mob/living/M as mob)
|
||||
text += "<BIG><IMG CLASS=icon SRC=\ref['icons/BadAss.dmi'] ICONSTATE='badass'></BIG>"
|
||||
|
||||
to_chat(world, text)
|
||||
|
||||
return 1
|
||||
|
||||
/proc/nukelastname(var/mob/M as mob) //--All praise goes to NEO|Phyte, all blame goes to DH, and it was Cindi-Kate's idea. Also praise Urist for copypasta ho.
|
||||
@@ -435,7 +407,6 @@ proc/issyndicate(mob/living/M as mob)
|
||||
else
|
||||
if (newname == "Unknown" || newname == "floor" || newname == "wall" || newname == "rwall" || newname == "_")
|
||||
to_chat(M, "That name is reserved.")
|
||||
|
||||
return nukelastname(M)
|
||||
|
||||
return newname
|
||||
|
||||
@@ -18,23 +18,19 @@
|
||||
return
|
||||
if(player_list.len < MIN_CHALLENGE_PLAYERS)
|
||||
to_chat(user, "The enemy crew is too small to be worth declaring war on.")
|
||||
|
||||
return
|
||||
if(user.z != ZLEVEL_CENTCOMM)
|
||||
to_chat(user, "You have to be at your base to use this.")
|
||||
|
||||
return
|
||||
|
||||
if(world.time > CHALLENGE_TIME_LIMIT)
|
||||
to_chat(user, "It's too late to declare hostilities. Your benefactors are already busy with other schemes. You'll have to make do with what you have on hand.")
|
||||
|
||||
return
|
||||
|
||||
declaring_war = 1
|
||||
var/are_you_sure = alert(user, "Consult your team carefully before you declare war on [station_name()]]. Are you sure you want to alert the enemy crew?", "Declare war?", "Yes", "No")
|
||||
if(are_you_sure == "No")
|
||||
to_chat(user, "On second thought, the element of surprise isn't so bad after all.")
|
||||
|
||||
declaring_war = 0
|
||||
return
|
||||
|
||||
@@ -42,7 +38,6 @@
|
||||
command_announcement.Announce(war_declaration, "Declaration of War", 'sound/effects/siren.ogg')
|
||||
to_chat(user, "You've attracted the attention of powerful forces within the syndicate. A bonus bundle of telecrystals has been granted to your team. Great things await you if you complete the mission.")
|
||||
|
||||
|
||||
for(var/obj/machinery/computer/shuttle/syndicate/S in machines)
|
||||
S.challenge = TRUE
|
||||
|
||||
|
||||
@@ -56,23 +56,19 @@ var/bomb_set
|
||||
panel_open = 1
|
||||
overlays += image(icon, "npanel_open")
|
||||
to_chat(user, "You unscrew the control panel of [src].")
|
||||
|
||||
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
else
|
||||
panel_open = 0
|
||||
overlays -= image(icon, "npanel_open")
|
||||
to_chat(user, "You screw the control panel of [src] back on.")
|
||||
|
||||
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
else
|
||||
if (panel_open == 0)
|
||||
to_chat(user, "[src] emits a buzzing noise, the panel staying locked in.")
|
||||
|
||||
if (panel_open == 1)
|
||||
panel_open = 0
|
||||
overlays -= image(icon, "npanel_open")
|
||||
to_chat(user, "You screw the control panel of [src] back on.")
|
||||
|
||||
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
flick("nuclearbombc", src)
|
||||
return
|
||||
@@ -96,7 +92,6 @@ var/bomb_set
|
||||
if(!WT.isOn()) return
|
||||
if (WT.get_fuel() < 5) // uses up 5 fuel.
|
||||
to_chat(user, "\red You need more fuel to complete this task.")
|
||||
|
||||
return
|
||||
|
||||
user.visible_message("[user] starts cutting loose the anchoring bolt covers on [src].", "You start cutting loose the anchoring bolt covers with [O]...")
|
||||
@@ -124,7 +119,6 @@ var/bomb_set
|
||||
if(!WT.isOn()) return
|
||||
if (WT.get_fuel() < 5) // uses up 5 fuel.
|
||||
to_chat(user, "\red You need more fuel to complete this task.")
|
||||
|
||||
return
|
||||
|
||||
user.visible_message("[user] starts cutting apart the anchoring system sealant on [src].", "You start cutting apart the anchoring system's sealant with [O]...")
|
||||
@@ -224,11 +218,9 @@ var/bomb_set
|
||||
|
||||
if (deployable)
|
||||
to_chat(usr, "\red You close several panels to make [src] undeployable.")
|
||||
|
||||
deployable = 0
|
||||
else
|
||||
to_chat(usr, "\red You adjust some panels to make [src] deployable.")
|
||||
|
||||
deployable = 1
|
||||
return
|
||||
|
||||
@@ -288,7 +280,6 @@ var/bomb_set
|
||||
return
|
||||
if (safety)
|
||||
to_chat(usr, "\red The safety is still on.")
|
||||
|
||||
nanomanager.update_uis(src)
|
||||
return
|
||||
timing = !(timing)
|
||||
@@ -331,7 +322,6 @@ var/bomb_set
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>There is nothing to anchor to!</span>")
|
||||
|
||||
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
/obj/machinery/nuclearbomb/ex_act(severity)
|
||||
@@ -382,14 +372,11 @@ var/bomb_set
|
||||
ticker.mode:nukes_left --
|
||||
else if(off_station == 1)
|
||||
to_chat(world, "<b>A nuclear device was set off, but the explosion was out of reach of the station!</b>")
|
||||
|
||||
else if(off_station == 2)
|
||||
to_chat(world, "<b>A nuclear device was set off, but the device was not on the station!</b>")
|
||||
|
||||
else
|
||||
to_chat(world, "<b>The station was destoyed by the nuclear blast!</b>")
|
||||
|
||||
|
||||
ticker.mode.station_was_nuked = (off_station<2) //offstation==1 is a draw. the station becomes irradiated and needs to be evacuated.
|
||||
//kinda shit but I couldn't get permission to do what I wanted to do.
|
||||
|
||||
@@ -416,7 +403,6 @@ var/bomb_set
|
||||
var/turf/disk_loc = get_turf(src)
|
||||
if(disk_loc.z != ZLEVEL_STATION && disk_loc.z != ZLEVEL_CENTCOMM)
|
||||
to_chat(get(src, /mob), "<span class='danger'>You can't help but feel that you just lost something back there...</span>")
|
||||
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/disk/nuclear/Destroy()
|
||||
|
||||
@@ -22,13 +22,11 @@
|
||||
active = 1
|
||||
workdisk()
|
||||
to_chat(usr, "<span class='notice'>You activate the pinpointer.</span>")
|
||||
|
||||
else
|
||||
active = 0
|
||||
icon_state = "pinoff"
|
||||
to_chat(usr, "<span class='notice'>You deactivate the pinpointer.</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/pinpointer/proc/scandisk()
|
||||
if(!the_disk)
|
||||
the_disk = locate()
|
||||
@@ -72,7 +70,6 @@
|
||||
if(bomb.timing)
|
||||
to_chat(user, "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]")
|
||||
|
||||
|
||||
/obj/item/weapon/pinpointer/advpinpointer
|
||||
name = "advanced pinpointer"
|
||||
desc = "A larger version of the normal pinpointer, this unit features a helpful quantum entanglement detection system to locate various objects that do not broadcast a locator signal."
|
||||
@@ -90,13 +87,11 @@
|
||||
if(mode == 2)
|
||||
point_at(target)
|
||||
to_chat(usr, "<span class='notice'>You activate the pinpointer.</span>")
|
||||
|
||||
else
|
||||
active = 0
|
||||
icon_state = "pinoff"
|
||||
to_chat(usr, "<span class='notice'>You deactivate the pinpointer.</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/pinpointer/advpinpointer/workdisk()
|
||||
if(mode == 0)
|
||||
scandisk()
|
||||
@@ -135,7 +130,6 @@
|
||||
to_chat(usr, "<span class='notice'>You set the pinpointer to locate [locationx],[locationy]</span>")
|
||||
|
||||
|
||||
|
||||
return attack_self()
|
||||
|
||||
if("Disk Recovery")
|
||||
@@ -159,10 +153,8 @@
|
||||
target = locate(item_paths[targetitem])
|
||||
if(!target)
|
||||
to_chat(usr, "<span class='warning'>Failed to locate [targetitem]!</span>")
|
||||
|
||||
return
|
||||
to_chat(usr, "<span class='notice'>You set the pinpointer to locate [targetitem].</span>")
|
||||
|
||||
if("DNA")
|
||||
var/DNAstring = input("Input DNA string to search for." , "Please Enter String." , "")
|
||||
if(!DNAstring)
|
||||
@@ -190,17 +182,14 @@
|
||||
if(!mode)
|
||||
workdisk()
|
||||
to_chat(user, "<span class='notice'>Authentication Disk Locator active.</span>")
|
||||
|
||||
else
|
||||
worklocation()
|
||||
to_chat(user, "<span class='notice'>Shuttle Locator active.</span>")
|
||||
|
||||
else
|
||||
active = 0
|
||||
icon_state = "pinoff"
|
||||
to_chat(user, "<span class='notice'>You deactivate the pinpointer.</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/pinpointer/nukeop/workdisk()
|
||||
if(!active) return
|
||||
if(mode) //Check in case the mode changes while operating
|
||||
@@ -271,19 +260,16 @@
|
||||
/obj/item/weapon/pinpointer/operative/attack_self()
|
||||
if(!usr.mind || !(usr.mind in ticker.mode.syndicates))
|
||||
to_chat(usr, "<span class='danger'>AUTHENTICATION FAILURE. ACCESS DENIED.</span>")
|
||||
|
||||
return 0
|
||||
if(!active)
|
||||
active = 1
|
||||
workop()
|
||||
to_chat(usr, "<span class='notice'>You activate the pinpointer.</span>")
|
||||
|
||||
else
|
||||
active = 0
|
||||
icon_state = "pinoff"
|
||||
to_chat(usr, "<span class='notice'>You deactivate the pinpointer.</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/pinpointer/operative/proc/scan_for_ops()
|
||||
if(active)
|
||||
nearest_op = null //Resets nearest_op every time it scans
|
||||
@@ -307,7 +293,5 @@
|
||||
if(active)
|
||||
if(nearest_op)
|
||||
to_chat(user, "Nearest operative detected is <i>[nearest_op.real_name].</i>")
|
||||
|
||||
else
|
||||
to_chat(user, "No operatives detected within scanning range.")
|
||||
|
||||
|
||||
@@ -34,11 +34,9 @@
|
||||
///////////////////////////
|
||||
/datum/game_mode/revolution/announce()
|
||||
to_chat(world, "<B>The current game mode is - Revolution!</B>")
|
||||
|
||||
to_chat(world, "<B>Some crewmembers are attempting to start a revolution!<BR>\nRevolutionaries - Kill the Captain, HoP, HoS, CE, RD and CMO. Convert other crewmembers (excluding the heads of staff, and security officers) to your cause by flashing them. Protect your leaders.<BR>\nPersonnel - Protect the heads of staff. Kill the leaders of the revolution, and brainwash the other revolutionaries (by beating them in the head).</B>")
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//Gets the round setup, cancelling if there's not enough players at the start//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@@ -130,7 +128,6 @@
|
||||
rev_mind.objectives += rev_obj
|
||||
to_chat(rev_mind.current, "Additional Objective: Assassinate [head_mind.name], the [head_mind.assigned_role].")
|
||||
|
||||
|
||||
for(var/datum/mind/rev_mind in mode.revolutionaries)
|
||||
for(var/datum/mind/head_mind in heads)
|
||||
var/datum/objective/mutiny/rev_obj = new
|
||||
@@ -141,7 +138,6 @@
|
||||
to_chat(rev_mind.current, "Additional Objective: Assassinate [head_mind.name], the [head_mind.assigned_role].")
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/proc/forge_revolutionary_objectives(var/datum/mind/rev_mind)
|
||||
var/list/heads = get_living_heads()
|
||||
if(num_players_started() >= 30)
|
||||
@@ -158,10 +154,8 @@
|
||||
var/obj_count = 1
|
||||
if (you_are)
|
||||
to_chat(rev_mind.current, "\blue You are a member of the revolutionaries' leadership!")
|
||||
|
||||
for(var/datum/objective/objective in rev_mind.objectives)
|
||||
to_chat(rev_mind.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
|
||||
rev_mind.special_role = "Head Revolutionary"
|
||||
obj_count++
|
||||
|
||||
@@ -175,7 +169,6 @@
|
||||
if (mob.mind)
|
||||
if (mob.mind.assigned_role == "Clown")
|
||||
to_chat(mob, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.")
|
||||
|
||||
mob.mutations.Remove(CLUMSY)
|
||||
|
||||
|
||||
@@ -191,10 +184,8 @@
|
||||
var/where = mob.equip_in_one_of_slots(T, slots)
|
||||
if (!where)
|
||||
to_chat(mob, "The Syndicate were unfortunately unable to get you a flash.")
|
||||
|
||||
else
|
||||
to_chat(mob, "The flash in your [where] will help you to persuade the crew to join your cause.")
|
||||
|
||||
mob.update_icons()
|
||||
return 1
|
||||
|
||||
@@ -232,7 +223,6 @@
|
||||
return 0
|
||||
revolutionaries += rev_mind
|
||||
to_chat(rev_mind.current, "\red <FONT size = 3> You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!</FONT>")
|
||||
|
||||
rev_mind.special_role = "Revolutionary"
|
||||
update_rev_icons_added(rev_mind)
|
||||
if(jobban_isbanned(rev_mind.current, ROLE_REV))
|
||||
@@ -248,23 +238,19 @@
|
||||
|
||||
if(beingborged)
|
||||
to_chat(rev_mind.current, "\red <FONT size = 3><B>The frame's firmware detects and deletes your neural reprogramming! You remember nothing from the moment you were flashed until now.</B></FONT>")
|
||||
|
||||
message_admins("[key_name_admin(rev_mind.current)] has been borged while being a member of the revolution.")
|
||||
else
|
||||
to_chat(rev_mind.current, "\red <FONT size = 3><B>You have been brainwashed! You are no longer a revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you...</B></FONT>")
|
||||
|
||||
|
||||
update_rev_icons_removed(rev_mind)
|
||||
for(var/mob/living/M in view(rev_mind.current))
|
||||
if(beingborged)
|
||||
to_chat(M, "The frame beeps contentedly, purging the hostile memory engram from the MMI before initalizing it.")
|
||||
|
||||
|
||||
else
|
||||
to_chat(M, "[rev_mind.current] looks like they just remembered their real allegiance!")
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////
|
||||
//Adds the rev hud to a new convert//
|
||||
/////////////////////////////////////
|
||||
@@ -309,11 +295,9 @@
|
||||
if(finished == 1)
|
||||
feedback_set_details("round_end_result","win - heads killed")
|
||||
to_chat(world, "\red <FONT size = 3><B> The heads of staff were killed or abandoned the station! The revolutionaries win!</B></FONT>")
|
||||
|
||||
else if(finished == 2)
|
||||
feedback_set_details("round_end_result","loss - rev heads killed")
|
||||
to_chat(world, "\red <FONT size = 3><B> The heads of staff managed to stop the revolution!</B></FONT>")
|
||||
|
||||
..()
|
||||
return 1
|
||||
|
||||
@@ -343,7 +327,6 @@
|
||||
|
||||
to_chat(world, text)
|
||||
|
||||
|
||||
if(revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution))
|
||||
var/text = "<FONT size = 2><B>The revolutionaries were:</B></FONT>"
|
||||
|
||||
@@ -365,7 +348,6 @@
|
||||
to_chat(world, text)
|
||||
|
||||
|
||||
|
||||
if( head_revolutionaries.len || revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution) )
|
||||
var/text = "<FONT size = 2><B>The heads of staff were:</B></FONT>"
|
||||
|
||||
@@ -394,7 +376,6 @@
|
||||
|
||||
to_chat(world, text)
|
||||
|
||||
|
||||
/proc/is_convertable_to_rev(datum/mind/mind)
|
||||
return istype(mind) && \
|
||||
istype(mind.current, /mob/living/carbon/human) && \
|
||||
|
||||
@@ -76,10 +76,8 @@
|
||||
var/obj_count = 1
|
||||
if (you_are)
|
||||
to_chat(rev_mind.current, "\blue You are a member of the revolutionaries' leadership!")
|
||||
|
||||
for(var/datum/objective/objective in rev_mind.objectives)
|
||||
to_chat(rev_mind.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
|
||||
rev_mind.special_role = "Head Revolutionary"
|
||||
obj_count++
|
||||
|
||||
@@ -92,7 +90,6 @@
|
||||
var/mob/living/carbon/human/M = get_nt_opposed()
|
||||
if(M && !(M.mind in head_revolutionaries) && !(M in already_considered))
|
||||
to_chat(rev_mob, "We have received credible reports that [M.real_name] might be willing to help our cause. If you need assistance, consider contacting them.")
|
||||
|
||||
rev_mob.mind.store_memory("<b>Potential Collaborator</b>: [M.real_name]")
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
@@ -107,7 +104,6 @@
|
||||
return 0
|
||||
revolutionaries += rev_mind
|
||||
to_chat(rev_mind.current, "\red <FONT size = 3> You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill, capture or convert the heads to win the revolution!</FONT>")
|
||||
|
||||
rev_mind.special_role = "Revolutionary"
|
||||
update_rev_icons_added(rev_mind)
|
||||
return 1
|
||||
@@ -132,11 +128,9 @@
|
||||
///////////////////////////
|
||||
/datum/game_mode/revolution/rp_revolution/announce()
|
||||
to_chat(world, "<B>The current game mode is - Revolution!</B>")
|
||||
|
||||
to_chat(world, "<B>Some crewmembers are attempting to start a revolution!</B>")
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//Announces the end of the game with all relavent information stated//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
@@ -144,11 +138,9 @@
|
||||
if(finished == 1)
|
||||
feedback_set_details("round_end_result","win - heads overthrown")
|
||||
to_chat(world, "\red <FONT size = 3><B> The heads of staff were overthrown! The revolutionaries win!</B></FONT>")
|
||||
|
||||
else if(finished == 2)
|
||||
feedback_set_details("round_end_result","loss - revolution stopped")
|
||||
to_chat(world, "\red <FONT size = 3><B> The heads of staff managed to stop the revolution!</B></FONT>")
|
||||
|
||||
..()
|
||||
return 1
|
||||
|
||||
@@ -168,37 +160,28 @@
|
||||
Possible += P
|
||||
if(!Possible.len)
|
||||
to_chat(src, "\red There doesn't appear to be anyone available for you to convert here.")
|
||||
|
||||
return
|
||||
var/mob/living/carbon/human/M = input("Select a person to convert", "Viva la revolution!", null) as mob in Possible
|
||||
if(((src.mind in ticker.mode:head_revolutionaries) || (src.mind in ticker.mode:revolutionaries)))
|
||||
if((M.mind in ticker.mode:head_revolutionaries) || (M.mind in ticker.mode:revolutionaries))
|
||||
to_chat(src, "\red <b>[M] is already be a revolutionary!</b>")
|
||||
|
||||
else if(!ticker.mode:is_convertible(M))
|
||||
to_chat(src, "\red <b>[M] is implanted with a loyalty implant - Remove it first!</b>")
|
||||
|
||||
else
|
||||
if(world.time < M.mind.rev_cooldown)
|
||||
to_chat(src, "\red Wait five seconds before reconversion attempt.")
|
||||
|
||||
return
|
||||
to_chat(src, "\red Attempting to convert [M]...")
|
||||
|
||||
log_admin("[src]([src.ckey]) attempted to convert [M].")
|
||||
message_admins("\red [src]([src.ckey]) attempted to convert [M].")
|
||||
var/choice = alert(M,"Asked by [src]: Do you want to join the revolution?","Align Thyself with the Revolution!","No!","Yes!")
|
||||
if(choice == "Yes!")
|
||||
ticker.mode:add_revolutionary(M.mind)
|
||||
to_chat(M, "\blue You join the revolution!")
|
||||
|
||||
to_chat(src, "\blue <b>[M] joins the revolution!</b>")
|
||||
|
||||
else if(choice == "No!")
|
||||
to_chat(M, "\red You reject this traitorous cause!")
|
||||
|
||||
to_chat(src, "\red <b>[M] does not support the revolution!</b>")
|
||||
|
||||
M.mind.rev_cooldown = world.time+50
|
||||
|
||||
/datum/game_mode/revolution/rp_revolution/process()
|
||||
@@ -226,7 +209,6 @@
|
||||
H.verbs += /mob/living/carbon/human/proc/RevConvert
|
||||
|
||||
to_chat(H, "\red Congratulations, yer heads of revolution are all gone now, so yer earned yourself a promotion.")
|
||||
|
||||
added_heads = 1
|
||||
break
|
||||
|
||||
@@ -261,7 +243,6 @@
|
||||
comm.messagetext.Add(message)
|
||||
to_chat(world, sound('sound/AI/commandreport.ogg'))
|
||||
|
||||
|
||||
/datum/game_mode/revolution/rp_revolution/latespawn(mob/M)
|
||||
if(M.mind.assigned_role in command_positions)
|
||||
log_debug("Adding head kill/capture/convert objective for [M.name]")
|
||||
@@ -274,4 +255,3 @@
|
||||
rev_obj.explanation_text = "Assassinate, convert or capture [M.real_name], the [M.mind.assigned_role]."
|
||||
rev_mind.objectives += rev_obj
|
||||
to_chat(rev_mind.current, "\red A new Head of Staff, [M.real_name], the [M.mind.assigned_role] has appeared. Your objectives have been updated.")
|
||||
|
||||
|
||||
@@ -53,12 +53,10 @@ datum/hSB
|
||||
if(!admin) return
|
||||
if(hsboxspawn)
|
||||
to_chat(world, "<b>Sandbox: [usr.key] has disabled object spawning!</b>")
|
||||
|
||||
hsboxspawn = 0
|
||||
return
|
||||
if(!hsboxspawn)
|
||||
to_chat(world, "<b>Sandbox: [usr.key] has enabled object spawning!</b>")
|
||||
|
||||
hsboxspawn = 1
|
||||
return
|
||||
if("hsbsuit")
|
||||
@@ -108,7 +106,6 @@ datum/hSB
|
||||
|
||||
hsb.loc = usr.loc
|
||||
to_chat(usr, "<b>Sandbox: Created an airlock.")
|
||||
|
||||
if("hsbcanister")
|
||||
var/list/hsbcanisters = subtypesof(/obj/machinery/portable_atmospherics/canister/)
|
||||
var/hsbcanister = input(usr, "Choose a canister to spawn.", "Sandbox:") in hsbcanisters + "Cancel"
|
||||
|
||||
@@ -8,10 +8,8 @@
|
||||
|
||||
/datum/game_mode/sandbox/announce()
|
||||
to_chat(world, "<B>The current game mode is - Sandbox!</B>")
|
||||
|
||||
to_chat(world, "<B>Build your own station with the sandbox-panel command!</B>")
|
||||
|
||||
|
||||
/datum/game_mode/sandbox/pre_setup()
|
||||
for(var/mob/M in player_list)
|
||||
M.CanBuild()
|
||||
|
||||
@@ -149,9 +149,7 @@
|
||||
|
||||
// Show the score - might add "ranks" later
|
||||
to_chat(world, "<b>The crew's final score is:</b>")
|
||||
|
||||
to_chat(world, "<b><font size='4'>[score_crewscore]</font></b>")
|
||||
|
||||
for(var/mob/E in player_list)
|
||||
if(E.client)
|
||||
if(E.client.prefs && !(E.client.prefs.toggles & DISABLE_SCOREBOARD))
|
||||
|
||||
@@ -77,10 +77,8 @@ Made by Xhuis
|
||||
|
||||
/datum/game_mode/shadowling/announce()
|
||||
to_chat(world, "<b>The current game mode is - Shadowling!</b>")
|
||||
|
||||
to_chat(world, "<b>There are alien <span class='deadsay'>shadowlings</span> on the station. Crew: Kill the shadowlings before they can eat or enthrall the crew. Shadowlings: Enthrall the crew while remaining in hiding.</b>")
|
||||
|
||||
|
||||
/datum/game_mode/shadowling/pre_setup()
|
||||
if(config.protect_roles_from_antagonist)
|
||||
restricted_jobs += protected_jobs
|
||||
@@ -108,9 +106,7 @@ Made by Xhuis
|
||||
log_game("[shadow.key] (ckey) has been selected as a Shadowling.")
|
||||
sleep(10)
|
||||
to_chat(shadow.current, "<br>")
|
||||
|
||||
to_chat(shadow.current, "<span class='deadsay'><b><font size=3>You are a shadowling!</font></b></span>")
|
||||
|
||||
greet_shadow(shadow)
|
||||
finalize_shadowling(shadow)
|
||||
process_shadow_objectives(shadow)
|
||||
@@ -125,7 +121,6 @@ Made by Xhuis
|
||||
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/proc/process_shadow_objectives(var/datum/mind/shadow_mind)
|
||||
var/objective = "enthrall" //may be devour later, but for now it seems murderbone-y
|
||||
|
||||
@@ -136,7 +131,6 @@ Made by Xhuis
|
||||
to_chat(shadow_mind.current, "<b>Objective #1</b>: [objective_explanation]<br>")
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/proc/finalize_shadowling(var/datum/mind/shadow_mind)
|
||||
var/mob/living/carbon/human/S = shadow_mind.current
|
||||
shadow_mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadowling_hatch)
|
||||
@@ -145,7 +139,6 @@ Made by Xhuis
|
||||
update_shadow_icons_added(shadow_mind)
|
||||
if(shadow_mind.assigned_role == "Clown")
|
||||
to_chat(S, "<span class='notice'>Your alien nature has allowed you to overcome your clownishness.</span>")
|
||||
|
||||
S.mutations.Remove(CLUMSY)
|
||||
|
||||
/datum/game_mode/proc/add_thrall(datum/mind/new_thrall_mind)
|
||||
@@ -161,17 +154,11 @@ Made by Xhuis
|
||||
new_thrall_mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/lesser_shadow_walk)
|
||||
new_thrall_mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadow_vision/thrall)
|
||||
to_chat(new_thrall_mind.current, "<span class='shadowling'><b>You see the truth. Reality has been torn away and you realize what a fool you've been.</b></span>")
|
||||
|
||||
to_chat(new_thrall_mind.current, "<span class='shadowling'><b>The shadowlings are your masters.</b> Serve them above all else and ensure they complete their goals.</span>")
|
||||
|
||||
to_chat(new_thrall_mind.current, "<span class='shadowling'>You may not harm other thralls or the shadowlings. However, you do not need to obey other thralls.</span>")
|
||||
|
||||
to_chat(new_thrall_mind.current, "<span class='shadowling'>Your body has been irreversibly altered. The attentive can see this - you may conceal it by wearing a mask.</span>")
|
||||
|
||||
to_chat(new_thrall_mind.current, "<span class='shadowling'>Though not nearly as powerful as your masters, you possess some weak powers. These can be found in the Thrall Abilities tab.</span>")
|
||||
|
||||
to_chat(new_thrall_mind.current, "<span class='shadowling'>You may communicate with your allies by speaking in the Shadowling Hivemind (:8).</span>")
|
||||
|
||||
if(jobban_isbanned(new_thrall_mind.current, ROLE_SHADOWLING))
|
||||
replace_jobbaned_player(new_thrall_mind.current, ROLE_SHADOWLING)
|
||||
|
||||
@@ -255,16 +242,12 @@ Made by Xhuis
|
||||
/datum/game_mode/shadowling/declare_completion()
|
||||
if(check_shadow_victory() && shuttle_master.emergency.mode >= SHUTTLE_ESCAPE) //Doesn't end instantly - this is hacky and I don't know of a better way ~X
|
||||
to_chat(world, "<span class='greentext'><b>The shadowlings have ascended and taken over the station!</b></span>")
|
||||
|
||||
else if(shadowling_dead && !check_shadow_victory()) //If the shadowlings have ascended, they can not lose the round
|
||||
to_chat(world, "<span class='redtext'><b>The shadowlings have been killed by the crew!</b></span>")
|
||||
|
||||
else if(!check_shadow_victory() && shuttle_master.emergency.mode >= SHUTTLE_ESCAPE)
|
||||
to_chat(world, "<span class='redtext'><b>The crew escaped the station before the shadowlings could ascend!</b></span>")
|
||||
|
||||
else
|
||||
to_chat(world, "<span class='redtext'><b>The shadowlings have failed!</b></span>")
|
||||
|
||||
..()
|
||||
return 1
|
||||
|
||||
@@ -304,7 +287,6 @@ Made by Xhuis
|
||||
to_chat(world, text)
|
||||
|
||||
|
||||
|
||||
/*
|
||||
MISCELLANEOUS
|
||||
*/
|
||||
@@ -339,9 +321,7 @@ Made by Xhuis
|
||||
if(H.stat != DEAD)
|
||||
to_chat(H, "<span class='userdanger'>The light burns you!</span>")//Message spam to say "GET THE FUCK OUT"
|
||||
|
||||
|
||||
to_chat(H, 'sound/weapons/sear.ogg')
|
||||
|
||||
else if(light_amount < LIGHT_HEAL_THRESHOLD)
|
||||
H.heal_overall_damage(5, 5)
|
||||
H.adjustToxLoss(-5)
|
||||
|
||||
@@ -6,13 +6,10 @@
|
||||
if(H.get_species() == "Lesser Shadowling" && is_thrall(H)) return 1
|
||||
if(!is_shadow_or_thrall(usr))
|
||||
to_chat(usr, "<span class='warning'>You can't wrap your head around how to do this.</span>")
|
||||
|
||||
else if(is_thrall(usr))
|
||||
to_chat(usr, "<span class='warning'>You aren't powerful enough to do this.</span>")
|
||||
|
||||
else if(is_shadow(usr))
|
||||
to_chat(usr, "<span class='warning'>Your telepathic ability is suppressed. Hatch or use Rapid Re-Hatch first.</span>")
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
@@ -28,7 +25,6 @@
|
||||
for(var/mob/living/carbon/human/target in targets)
|
||||
if(!ishuman(target))
|
||||
to_chat(usr, "<span class='warning'>You may only glare at humans!</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(!shadowling_check(usr))
|
||||
@@ -36,12 +32,10 @@
|
||||
return
|
||||
if(target.stat)
|
||||
to_chat(usr, "<span class='warning'>[target] must be conscious!</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(is_shadow_or_thrall(target))
|
||||
to_chat(usr, "<span class='danger'>You don't see why you would want to paralyze an ally.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
var/mob/living/carbon/human/M = target
|
||||
@@ -49,10 +43,8 @@
|
||||
target.visible_message("<span class='danger'>[target] freezes in place, their eyes glazing over...</span>")
|
||||
if(in_range(target, usr))
|
||||
to_chat(target, "<span class='userdanger'>Your gaze is forcibly drawn into [usr]'s eyes, and you are mesmerized by their heavenly beauty...</span>")
|
||||
|
||||
else //Only alludes to the shadowling if the target is close by
|
||||
to_chat(target, "<span class='userdanger'>Red lights suddenly dance in your vision, and you are mesmerized by the heavenly lights...</span>")
|
||||
|
||||
target.Stun(10)
|
||||
M.silent += 10
|
||||
|
||||
@@ -69,17 +61,14 @@
|
||||
for(var/mob/living/carbon/human/target in targets)
|
||||
if(!ishuman(target) || !target)
|
||||
to_chat(usr, "<span class='warning'>You nay only glare at humans!</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(target.stat)
|
||||
to_chat(usr, "<span class='warning'>[target] must be conscious!</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(is_shadow_or_thrall(target))
|
||||
to_chat(usr, "<span class='warning'>You cannot glare at allies!</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
var/mob/living/carbon/human/M = target
|
||||
@@ -87,10 +76,8 @@
|
||||
target.visible_message("<span class='danger'>[target] freezes in place, their eyes glazing over...</span>")
|
||||
if(in_range(target, usr))
|
||||
to_chat(target, "<span class='userdanger'>Your gaze is forcibly drawn into [usr]'s eyes, and you are mesmerized by the heavenly lights...</span>")
|
||||
|
||||
else
|
||||
to_chat(target, "<span class='userdanger'>Red lights suddenly dance in your vision, and you are mesmerized by their heavenly beauty...</span>")
|
||||
|
||||
target.Stun(3) //Roughly 30% as long as the normal one
|
||||
M.silent += 3
|
||||
|
||||
@@ -156,7 +143,6 @@
|
||||
charge_counter = charge_max
|
||||
return
|
||||
to_chat(usr, "<span class='shadowling'>You silently disable all nearby lights.</span>")
|
||||
|
||||
for(var/obj/effect/glowshroom/G in orange(2, usr)) //Why the fuck was this in the loop below?
|
||||
G.visible_message("<span class='warning'>\The [G] withers away!</span>")
|
||||
qdel(G)
|
||||
@@ -251,11 +237,9 @@
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(!H.vision_type)
|
||||
to_chat(H, "<span class='notice'>You shift the nerves in your eyes, allowing you to see in the dark.</span>")
|
||||
|
||||
H.vision_type = new vision_path
|
||||
else
|
||||
to_chat(H, "<span class='notice'>You return your vision to normal.</span>")
|
||||
|
||||
H.vision_type = null
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/shadow_vision/thrall
|
||||
@@ -277,7 +261,6 @@
|
||||
charge_counter = charge_max
|
||||
return
|
||||
to_chat(usr, "<span class='shadowling'>You freeze the nearby air.</span>")
|
||||
|
||||
playsound(usr.loc, 'sound/effects/ghost2.ogg', 50, 1)
|
||||
|
||||
for(var/turf/T in targets)
|
||||
@@ -287,10 +270,8 @@
|
||||
continue
|
||||
else
|
||||
to_chat(M, "<span class='danger'>You feel a blast of paralyzingly cold air wrap around you and flow past, but you are unaffected!</span>")
|
||||
|
||||
continue
|
||||
to_chat(M, "<span class='userdanger'>A wave of shockingly cold air engulfs you!</span>")
|
||||
|
||||
M.Stun(2)
|
||||
M.apply_damage(10, BURN)
|
||||
if(M.bodytemperature)
|
||||
@@ -321,89 +302,68 @@
|
||||
for(var/mob/living/carbon/human/target in targets)
|
||||
if(!in_range(usr, target))
|
||||
to_chat(usr, "<span class='warning'>You need to be closer to enthrall [target].</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(!target.key || !target.mind)
|
||||
to_chat(usr, "<span class='warning'>The target has no mind.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(target.stat)
|
||||
to_chat(usr, "<span class='warning'>The target must be conscious.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(is_shadow_or_thrall(target))
|
||||
to_chat(usr, "<span class='warning'>You can not enthrall allies.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(!ishuman(target))
|
||||
to_chat(usr, "<span class='warning'>You can only enthrall humans.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(enthralling)
|
||||
to_chat(usr, "<span class='warning'>You are already enthralling!</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(!target.client)
|
||||
to_chat(usr, "<span class='warning'>[target]'s mind is vacant of activity.</span>")
|
||||
|
||||
enthralling = 1
|
||||
to_chat(usr, "<span class='danger'>This target is valid. You begin the enthralling.</span>")
|
||||
|
||||
to_chat(target, "<span class='userdanger'>[usr] stares at you. You feel your head begin to pulse.</span>")
|
||||
|
||||
|
||||
for(var/progress = 0, progress <= 3, progress++)
|
||||
switch(progress)
|
||||
if(1)
|
||||
to_chat(usr, "<span class='notice'>You place your hands to [target]'s head...</span>")
|
||||
|
||||
usr.visible_message("<span class='warning'>[usr] places their hands onto the sides of [target]'s head!</span>")
|
||||
if(2)
|
||||
to_chat(usr, "<span class='notice'>You begin preparing [target]'s mind as a blank slate...</span>")
|
||||
|
||||
usr.visible_message("<span class='warning'>[usr]'s palms flare a bright red against [target]'s temples!</span>")
|
||||
to_chat(target, "<span class='danger'>A terrible red light floods your mind. You collapse as conscious thought is wiped away.</span>")
|
||||
|
||||
target.Weaken(12)
|
||||
sleep(20)
|
||||
if(isloyal(target))
|
||||
to_chat(usr, "<span class='notice'>They are enslaved by Nanotrasen. You begin to shut down the nanobot implant - this will take some time.</span>")
|
||||
|
||||
usr.visible_message("<span class='warning'>[usr] pauses, then dips their head in concentration!</span>")
|
||||
to_chat(target, "<span class='boldannounce'>You feel your loyalties begin to weaken!</span>")
|
||||
|
||||
sleep(100) //10 seconds - not spawn() so the enthralling takes longer
|
||||
to_chat(usr, "<span class='notice'>The nanobots composing the loyalty implant have been rendered inert. Now to continue.</span>")
|
||||
|
||||
usr.visible_message("<span class='warning'>[usr] relaxes again.</span>")
|
||||
for(var/obj/item/weapon/implant/loyalty/L in target)
|
||||
if(L && L.implanted)
|
||||
qdel(L)
|
||||
to_chat(target, "<span class='boldannounce'>Your unwavering loyalty to Nanotrasen unexpectedly falters, dims, dies.</span>")
|
||||
|
||||
if(3)
|
||||
to_chat(usr, "<span class='notice'>You begin planting the tumor that will control the new thrall...</span>")
|
||||
|
||||
usr.visible_message("<span class='warning'>A strange energy passes from [usr]'s hands into [target]'s head!</span>")
|
||||
to_chat(target, "<span class='boldannounce'>You feel your memories twisting, morphing. A sense of horror dominates your mind.</span>")
|
||||
|
||||
if(!do_mob(usr, target, 70)) //around 21 seconds total for enthralling, 31 for someone with a loyalty implant
|
||||
to_chat(usr, "<span class='warning'>The enthralling has been interrupted - your target's mind returns to its previous state.</span>")
|
||||
|
||||
to_chat(target, "<span class='userdanger'>You wrest yourself away from [usr]'s hands and compose yourself</span>")
|
||||
|
||||
enthralling = 0
|
||||
return
|
||||
|
||||
enthralling = 0
|
||||
to_chat(usr, "<span class='shadowling'>You have enthralled <b>[target]</b>!</span>")
|
||||
|
||||
target.visible_message("<span class='big'>[target] looks to have experienced a revelation!</span>", \
|
||||
"<span class='warning'>False faces all d<b>ark not real not real not--</b></span>")
|
||||
target.setOxyLoss(0) //In case the shadowling was choking them out
|
||||
@@ -423,7 +383,6 @@
|
||||
/obj/effect/proc_holder/spell/targeted/shadowling_regenarmor/cast(list/targets)
|
||||
if(!is_shadow(usr))
|
||||
to_chat(usr, "<span class='warning'>You must be a shadowling to do this!</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
for(var/mob/living/user in targets)
|
||||
@@ -467,22 +426,18 @@
|
||||
|
||||
to_chat(user, "<span class='shadowling'><b>You focus your telepathic energies abound, harnessing and drawing together the strength of your thralls.</b></span>")
|
||||
|
||||
|
||||
for(M in living_mob_list)
|
||||
if(is_thrall(M))
|
||||
thralls++
|
||||
to_chat(M, "<span class='shadowling'>You feel hooks sink into your mind and pull.</span>")
|
||||
|
||||
|
||||
if(!do_after(user, 30, target = user))
|
||||
to_chat(user, "<span class='warning'>Your concentration has been broken. The mental hooks you have sent out now retract into your mind.</span>")
|
||||
|
||||
return
|
||||
|
||||
if(thralls >= 3 && !screech_acquired)
|
||||
screech_acquired = 1
|
||||
to_chat(user, "<span class='shadowling'><i>The power of your thralls has granted you the <b>Sonic Screech</b> ability. This ability will shatter nearby windows and deafen enemies, plus stunning silicon lifeforms.</span>")
|
||||
|
||||
user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/unearthly_screech)
|
||||
|
||||
if(thralls >= 5 && !blind_smoke_acquired)
|
||||
@@ -494,7 +449,6 @@
|
||||
if(thralls >= 7 && !drainLifeAcquired)
|
||||
drainLifeAcquired = 1
|
||||
to_chat(user, "<span class='shadowling'><i>The power of your thralls has granted you the <b>Drain Life</b> ability. You can now drain the health of nearby humans to heal yourself.</i></span>")
|
||||
|
||||
user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/drainLife)
|
||||
|
||||
if(thralls >= 9 && !reviveThrallAcquired)
|
||||
@@ -506,12 +460,9 @@
|
||||
if(thralls < victory_threshold)
|
||||
to_chat(user, "<span class='shadowling'>You do not have the power to ascend. You require [victory_threshold] thralls, but only [thralls] living thralls are present.</span>")
|
||||
|
||||
|
||||
else if(thralls >= victory_threshold)
|
||||
to_chat(usr, "<span class='shadowling'><b>You are now powerful enough to ascend. Use the Ascendance ability when you are ready. <i>This will kill all of your thralls.</i></span>")
|
||||
|
||||
to_chat(usr, "<span class='shadowling'><b>You may find Ascendance in the Shadowling Evolution tab.</b></span>")
|
||||
|
||||
for(M in living_mob_list)
|
||||
if(is_shadow(M))
|
||||
var/obj/effect/proc_holder/spell/targeted/collective_mind/CM
|
||||
@@ -522,14 +473,12 @@
|
||||
M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadowling_ascend)
|
||||
if(M == usr)
|
||||
to_chat(M, "<span class='shadowling'><i>You project this power to the rest of the shadowlings.</i></span>")
|
||||
|
||||
else
|
||||
to_chat(M, "<span class='shadowling'><b>[user.real_name] has coalesced the strength of the thralls. You can draw upon it at any time to ascend. (Shadowling Evolution Tab)</b></span>")//Tells all the other shadowlings
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/blindness_smoke
|
||||
name = "Blindness Smoke"
|
||||
desc = "Spews a cloud of smoke which will blind enemies."
|
||||
@@ -547,7 +496,6 @@
|
||||
for(var/mob/living/user in targets)
|
||||
user.visible_message("<span class='warning'>[user] suddenly bends over and coughs out a cloud of black smoke, which begins to spread rapidly!</span>")
|
||||
to_chat(user, "<span class='deadsay'>You regurgitate a vast cloud of blinding smoke.</span>")
|
||||
|
||||
playsound(user, 'sound/effects/bamf.ogg', 50, 1)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/large/B = new /obj/item/weapon/reagent_containers/glass/beaker/large(user.loc)
|
||||
B.reagents.clear_reagents() //Just in case!
|
||||
@@ -572,14 +520,12 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
if(!is_shadow_or_thrall(M))
|
||||
to_chat(M, "<span class='warning'><b>You breathe in the black smoke, and your eyes burn horribly!</b></span>")
|
||||
|
||||
M.eye_blind = 5
|
||||
if(prob(25))
|
||||
M.visible_message("<b>[M]</b> claws at their eyes!")
|
||||
M.Stun(3)
|
||||
else
|
||||
to_chat(M, "<span class='notice'><b>You breathe in the black smoke, and you feel revitalized!</b></span>")
|
||||
|
||||
M.heal_organ_damage(2,2)
|
||||
M.adjustOxyLoss(-2)
|
||||
M.adjustToxLoss(-2)
|
||||
@@ -614,15 +560,12 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/M = target
|
||||
to_chat(M, "<span class='danger'><b>A spike of pain drives into your head and scrambles your thoughts!</b></span>")
|
||||
|
||||
M.confused += 10
|
||||
M.ear_damage += 3
|
||||
else if(issilicon(target))
|
||||
var/mob/living/silicon/S = target
|
||||
to_chat(S, "<span class='warning'><b>ERROR $!(@ ERROR )#^! SENSORY OVERLOAD \[$(!@#</b></span>")
|
||||
|
||||
to_chat(S, 'sound/misc/interference.ogg')
|
||||
|
||||
playsound(S, 'sound/machines/warning-buzzer.ogg', 50, 1)
|
||||
var/datum/effect/system/spark_spread/sp = new /datum/effect/system/spark_spread
|
||||
sp.set_up(5, 1, S)
|
||||
@@ -659,7 +602,6 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
if(!targetsDrained)
|
||||
charge_counter = charge_max
|
||||
to_chat(usr, "<span class='warning'>There were no nearby humans for you to drain.</span>")
|
||||
|
||||
return
|
||||
for(var/mob/living/carbon/M in nearbyTargets)
|
||||
U.heal_organ_damage(10, 10)
|
||||
@@ -671,12 +613,10 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
M.adjustOxyLoss(20)
|
||||
M.adjustStaminaLoss(20)
|
||||
to_chat(M, "<span class='boldannounce'>You feel a wave of exhaustion and a curious draining sensation directed towards [usr]!</span>")
|
||||
|
||||
to_chat(usr, "<span class='shadowling'>You draw life from those around you to heal your wounds.</span>")
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/reviveThrall
|
||||
name = "Black Recuperation"
|
||||
desc = "Revives or empowers a thrall."
|
||||
@@ -697,17 +637,14 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
if("Empower")
|
||||
if(!is_thrall(thrallToRevive))
|
||||
to_chat(usr, "<span class='warning'>[thrallToRevive] is not a thrall.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(thrallToRevive.stat != CONSCIOUS)
|
||||
to_chat(usr, "<span class='warning'>[thrallToRevive] must be conscious to become empowered.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(thrallToRevive.get_species() == "Lesser Shadowling")
|
||||
to_chat(usr, "<span class='warning'>[thrallToRevive] is already empowered.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
var/empowered_thralls = 0
|
||||
@@ -719,20 +656,16 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
empowered_thralls++
|
||||
if(empowered_thralls >= EMPOWERED_THRALL_LIMIT)
|
||||
to_chat(usr, "<span class='warning'>You cannot spare this much energy. There are too many empowered thralls.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
usr.visible_message("<span class='danger'>[usr] places their hands over [thrallToRevive]'s face, red light shining from beneath.</span>", \
|
||||
"<span class='shadowling'>You place your hands on [thrallToRevive]'s face and begin gathering energy...</span>")
|
||||
to_chat(thrallToRevive, "<span class='userdanger'>[usr] places their hands over your face. You feel energy gathering. Stand still...</span>")
|
||||
|
||||
if(!do_mob(usr, thrallToRevive, 80))
|
||||
to_chat(usr, "<span class='warning'>Your concentration snaps. The flow of energy ebbs.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
to_chat(usr, "<span class='shadowling'><b><i>You release a massive surge of power into [thrallToRevive]!</b></i></span>")
|
||||
|
||||
usr.visible_message("<span class='boldannounce'><i>Red lightning surges into [thrallToRevive]'s face!</i></span>")
|
||||
playsound(thrallToRevive, 'sound/weapons/Egloves.ogg', 50, 1)
|
||||
playsound(thrallToRevive, 'sound/machines/defib_zap.ogg', 50, 1)
|
||||
@@ -752,12 +685,10 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
if("Revive")
|
||||
if(!is_thrall(thrallToRevive))
|
||||
to_chat(usr, "<span class='warning'>[thrallToRevive] is not a thrall.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(thrallToRevive.stat != DEAD)
|
||||
to_chat(usr, "<span class='warning'>[thrallToRevive] is not dead.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
usr.visible_message("<span class='danger'>[usr] kneels over [thrallToRevive], placing their hands on \his chest.</span>", \
|
||||
@@ -765,11 +696,9 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
thrallToRevive.notify_ghost_cloning("Your masters are resuscitating you! Re-enter your corpse if you wish to be brought to life.", source = thrallToRevive)
|
||||
if(!do_mob(usr, thrallToRevive, 30))
|
||||
to_chat(usr, "<span class='warning'>Your concentration snaps. The flow of energy ebbs.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
to_chat(usr, "<span class='shadowling'><b><i>You release a massive surge of power into [thrallToRevive]!</b></i></span>")
|
||||
|
||||
usr.visible_message("<span class='boldannounce'><i>Red lightning surges from [usr]'s hands into [thrallToRevive]'s chest!</i></span>")
|
||||
playsound(thrallToRevive, 'sound/weapons/Egloves.ogg', 50, 1)
|
||||
playsound(thrallToRevive, 'sound/machines/defib_zap.ogg', 50, 1)
|
||||
@@ -804,12 +733,10 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
return
|
||||
if(!is_thrall(target))
|
||||
to_chat(usr, "<span class='warning'>[target] must be a thrall.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(shuttle_master.emergency.mode != SHUTTLE_CALL)
|
||||
to_chat(usr, "<span class='warning'>The shuttle must be inbound only to the station.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
var/mob/living/carbon/human/M = target
|
||||
@@ -819,12 +746,9 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
"<span class='boldannounce'>You are suddenly transported... far, far away...</span>")
|
||||
if(!do_after(usr, 50, target = M))
|
||||
to_chat(M, "<span class='warning'>You are snapped back to reality, your haze dissipating!</span>")
|
||||
|
||||
to_chat(usr, "<span class='warning'>You have been interrupted. The draw has failed.</span>")
|
||||
|
||||
return
|
||||
to_chat(usr, "<span class='notice'>You project [M]'s life force toward the approaching shuttle, extending its arrival duration!</span>")
|
||||
|
||||
M.visible_message("<span class='warning'>[M]'s eyes suddenly flare red. They proceed to collapse on the floor, not breathing.</span>", \
|
||||
"<span class='warning'><b>...speeding by... ...pretty blue glow... ...touch it... ...no glow now... ...no light... ...nothing at all...</span>")
|
||||
M.death()
|
||||
@@ -852,7 +776,6 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
|
||||
if(SHA.phasing)
|
||||
to_chat(usr, "<span class='warning'>You are not in the same plane of existence. Unphase first.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
|
||||
@@ -860,7 +783,6 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
for(var/mob/living/boom in targets)
|
||||
if(is_shadow(boom)) //Used to not work on thralls. Now it does so you can PUNISH THEM LIKE THE WRATHFUL GOD YOU ARE.
|
||||
to_chat(usr, "<span class='warning'>Making an ally explode seems unwise.<span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
usr.visible_message("<span class='danger'>[usr]'s markings flare as they gesture at [boom]!</span>", \
|
||||
@@ -887,35 +809,28 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
if(SHA.phasing)
|
||||
charge_counter = charge_max
|
||||
to_chat(usr, "<span class='warning'>You are not in the same plane of existence. Unphase first.</span>")
|
||||
|
||||
return
|
||||
|
||||
for(var/mob/living/carbon/human/target in targets)
|
||||
if(is_shadow_or_thrall(target))
|
||||
to_chat(usr, "<span class='warning'>You cannot enthrall an ally.<span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(!target.ckey || !target.mind)
|
||||
to_chat(usr, "<span class='warning'>The target has no mind.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(target.stat)
|
||||
to_chat(usr, "<span class='warning'>The target must be conscious.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(!ishuman(target))
|
||||
to_chat(usr, "<span class='warning'>You can only enthrall humans.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
|
||||
to_chat(usr, "<span class='shadowling'>You instantly rearrange <b>[target]</b>'s memories, hyptonitizing them into a thrall.</span>")
|
||||
|
||||
to_chat(target, "<span class='userdanger'><font size=3>An agonizing spike of pain drives into your mind, and--</font></span>")
|
||||
|
||||
ticker.mode.add_thrall(target.mind)
|
||||
target.mind.special_role = "shadowling thrall"
|
||||
target.add_language("Shadowling Hivemind")
|
||||
@@ -962,7 +877,6 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
|
||||
if(SHA.phasing)
|
||||
to_chat(usr, "<span class='warning'>You are not in the same plane of existence. Unphase first.</span>")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
|
||||
@@ -974,7 +888,6 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
if(is_shadow_or_thrall(target))
|
||||
continue
|
||||
to_chat(target, "<span class='userdanger'>You are struck by a bolt of lightning!</span>")
|
||||
|
||||
playsound(target, 'sound/magic/LightningShock.ogg', 50, 1)
|
||||
target.Weaken(8)
|
||||
target.take_organ_damage(0,50)
|
||||
@@ -996,4 +909,3 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
|
||||
if(!text)
|
||||
return
|
||||
to_chat(world, "<font size=4><span class='shadowling'><b>\"[text]\"</font></span>")
|
||||
|
||||
|
||||
@@ -15,14 +15,12 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N
|
||||
return
|
||||
if(!isturf(usr.loc))
|
||||
to_chat(usr, "<span class='warning'>You can't hatch here!</span>")
|
||||
|
||||
return
|
||||
for(var/mob/living/carbon/human/H in targets)
|
||||
var/hatch_or_no = alert(H,"Are you sure you want to hatch? You cannot undo this!",,"Yes","No")
|
||||
switch(hatch_or_no)
|
||||
if("No")
|
||||
to_chat(H, "<span class='warning'>You decide against hatching for now.")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if("Yes")
|
||||
@@ -58,15 +56,12 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N
|
||||
sleep(80)
|
||||
playsound(H.loc, 'sound/weapons/slash.ogg', 25, 1)
|
||||
to_chat(H, "<i><b>You rip and slice.</b></i>")
|
||||
|
||||
sleep(10)
|
||||
playsound(H.loc, 'sound/weapons/slashmiss.ogg', 25, 1)
|
||||
to_chat(H, "<i><b>The chrysalis falls like water before you.</b></i>")
|
||||
|
||||
sleep(10)
|
||||
playsound(H.loc, 'sound/weapons/slice.ogg', 25, 1)
|
||||
to_chat(H, "<i><b>You are free!</b></i>")
|
||||
|
||||
H.status_flags = temp_flags
|
||||
sleep(10)
|
||||
playsound(H.loc, 'sound/effects/ghost.ogg', 100, 1)
|
||||
@@ -77,7 +72,6 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N
|
||||
H.SetStunned(0)
|
||||
to_chat(H, "<i><b><font size=3>YOU LIVE!!!</i></b></font>")
|
||||
|
||||
|
||||
for(var/obj/structure/alien/resin/wall/shadowling/W in orange(H, 1))
|
||||
playsound(W, 'sound/effects/splat.ogg', 50, 1)
|
||||
qdel(W)
|
||||
@@ -102,7 +96,6 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N
|
||||
|
||||
sleep(10)
|
||||
to_chat(H, "<span class='shadowling'><b><i>Your powers are awoken. You may now live to your fullest extent. Remember your goal. Cooperate with your thralls and allies.</b></i></span>")
|
||||
|
||||
H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadow_vision)
|
||||
H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/enthrall)
|
||||
H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/glare)
|
||||
@@ -132,7 +125,6 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N
|
||||
switch(hatch_or_no)
|
||||
if("No")
|
||||
to_chat(H, "<span class='warning'>You decide against ascending for now.")
|
||||
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if("Yes")
|
||||
@@ -155,22 +147,16 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N
|
||||
|
||||
sleep(40)
|
||||
to_chat(H, "<i><b>Yes!</b></i>")
|
||||
|
||||
sleep(10)
|
||||
to_chat(H, "<i><b><span class='big'>YES!!</span></b></i>")
|
||||
|
||||
sleep(10)
|
||||
to_chat(H, "<i><b><span class='reallybig'>YE--</span></b></i>")
|
||||
|
||||
sleep(1)
|
||||
for(var/mob/living/M in orange(7, H))
|
||||
M.Weaken(10)
|
||||
to_chat(M, "<span class='userdanger'>An immense pressure slams you onto the ground!</span>")
|
||||
|
||||
to_chat(world, "<font size=5><span class='shadowling'><b>\"VYSHA NERADA YEKHEZET U'RUU!!\"</font></span>")
|
||||
|
||||
to_chat(world, 'sound/hallucinations/veryfar_noise.ogg')
|
||||
|
||||
for(var/obj/machinery/power/apc/A in apcs)
|
||||
A.overload_lighting()
|
||||
var/mob/A = new /mob/living/simple_animal/ascendant_shadowling(H.loc)
|
||||
|
||||
@@ -26,11 +26,9 @@
|
||||
|
||||
/datum/game_mode/traitor/announce()
|
||||
to_chat(world, "<B>The current game mode is - Traitor!</B>")
|
||||
|
||||
to_chat(world, "<B>There is a syndicate traitor on the station. Do not let the traitor succeed!</B>")
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/traitor/pre_setup()
|
||||
|
||||
if(config.protect_roles_from_antagonist)
|
||||
@@ -175,11 +173,9 @@
|
||||
|
||||
/datum/game_mode/proc/greet_traitor(var/datum/mind/traitor)
|
||||
to_chat(traitor.current, "<B><font size=3 color=red>You are the traitor.</font></B>")
|
||||
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/objective in traitor.objectives)
|
||||
to_chat(traitor.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
|
||||
obj_count++
|
||||
return
|
||||
|
||||
@@ -206,26 +202,20 @@
|
||||
|
||||
/datum/game_mode/proc/give_codewords(mob/living/traitor_mob)
|
||||
to_chat(traitor_mob, "<U><B>The Syndicate provided you with the following information on how to identify their agents:</B></U>")
|
||||
|
||||
to_chat(traitor_mob, "<B>Code Phrase</B>: <span class='danger'>[syndicate_code_phrase]</span>")
|
||||
|
||||
to_chat(traitor_mob, "<B>Code Response</B>: <span class='danger'>[syndicate_code_response]</span>")
|
||||
|
||||
|
||||
traitor_mob.mind.store_memory("<b>Code Phrase</b>: [syndicate_code_phrase]")
|
||||
traitor_mob.mind.store_memory("<b>Code Response</b>: [syndicate_code_response]")
|
||||
|
||||
to_chat(traitor_mob, "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe.")
|
||||
|
||||
|
||||
/datum/game_mode/proc/add_law_zero(mob/living/silicon/ai/killer)
|
||||
var/law = "Accomplish your objectives at all costs."
|
||||
var/law_borg = "Accomplish your AI's objectives at all costs."
|
||||
to_chat(killer, "<b>Your laws have been changed!</b>")
|
||||
|
||||
killer.set_zeroth_law(law, law_borg)
|
||||
to_chat(killer, "New law: 0. [law]")
|
||||
|
||||
give_codewords(killer)
|
||||
|
||||
|
||||
@@ -288,7 +278,6 @@
|
||||
|
||||
|
||||
to_chat(world, text)
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -299,7 +288,6 @@
|
||||
if (traitor_mob.mind)
|
||||
if (traitor_mob.mind.assigned_role == "Clown")
|
||||
to_chat(traitor_mob, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.")
|
||||
|
||||
traitor_mob.mutations.Remove(CLUMSY)
|
||||
|
||||
// find a radio! toolbox(es), backpack, belt, headset
|
||||
@@ -309,7 +297,6 @@
|
||||
|
||||
if (!R)
|
||||
to_chat(traitor_mob, "Unfortunately, the Syndicate wasn't able to get you a radio.")
|
||||
|
||||
. = 0
|
||||
else
|
||||
if (istype(R, /obj/item/device/radio))
|
||||
@@ -330,7 +317,6 @@
|
||||
T.uplink_owner = "[traitor_mob.key]"
|
||||
target_radio.traitor_frequency = freq
|
||||
to_chat(traitor_mob, "The Syndicate have cunningly disguised a Syndicate Uplink as your [R.name] [T.loc]. Simply dial the frequency [format_frequency(freq)] to unlock its hidden features.")
|
||||
|
||||
traitor_mob.mind.store_memory("<B>Radio Freq:</B> [format_frequency(freq)] ([R.name] [T.loc]).")
|
||||
else if (istype(R, /obj/item/device/pda))
|
||||
// generate a passcode if the uplink is hidden in a PDA
|
||||
@@ -343,7 +329,6 @@
|
||||
P.lock_code = pda_pass
|
||||
|
||||
to_chat(traitor_mob, "The Syndicate have cunningly disguised a Syndicate Uplink as your [R.name] [T.loc]. Simply enter the code \"[pda_pass]\" into the ringtone select to unlock its hidden features.")
|
||||
|
||||
traitor_mob.mind.store_memory("<B>Uplink Passcode:</B> [pda_pass] ([R.name] [T.loc]).")
|
||||
if(!safety)//If they are not a rev. Can be added on to.
|
||||
give_codewords(traitor_mob)
|
||||
@@ -352,7 +337,6 @@
|
||||
var/mob/living/carbon/human/M = get_nt_opposed()
|
||||
if(M && M != traitor_mob)
|
||||
to_chat(traitor_mob, "We have received credible reports that [M.real_name] might be willing to help our cause. If you need assistance, consider contacting them.")
|
||||
|
||||
traitor_mob.mind.store_memory("<b>Potential Collaborator</b>: [M.real_name]")
|
||||
|
||||
/datum/game_mode/proc/update_traitor_icons_added(datum/mind/traitor_mind)
|
||||
@@ -383,10 +367,8 @@
|
||||
|
||||
update_traitor_icons_removed(traitor_mind)
|
||||
// to_chat(world, "Removed [traitor_mind.current.name] from traitor shit")
|
||||
|
||||
to_chat(traitor_mind.current, "\red <FONT size = 3><B>The fog clouding your mind clears. You remember nothing from the moment you were implanted until now.(You don't remember who implanted you)</B></FONT>")
|
||||
|
||||
|
||||
/datum/game_mode/proc/assign_exchange_role(var/datum/mind/owner)
|
||||
//set faction
|
||||
var/faction = "red"
|
||||
@@ -427,5 +409,4 @@
|
||||
if (equipped_slot)
|
||||
where = "In your [equipped_slot]"
|
||||
to_chat(mob, "<BR><BR><span class='info'>[where] is a folder containing <b>secret documents</b> that another Syndicate group wants. We have set up a meeting with one of their agents on station to make an exchange. Exercise extreme caution as they cannot be trusted and may be hostile.</span><BR>")
|
||||
|
||||
mob.update_icons()
|
||||
|
||||
@@ -39,10 +39,8 @@
|
||||
|
||||
/datum/game_mode/vampire/announce()
|
||||
to_chat(world, "<B>The current game mode is - Vampires!</B>")
|
||||
|
||||
to_chat(world, "<B>There are Vampires from Space Transylvania on the station, keep your blood close and neck safe!</B>")
|
||||
|
||||
|
||||
/datum/game_mode/vampire/pre_setup()
|
||||
|
||||
if(config.protect_roles_from_antagonist)
|
||||
@@ -119,7 +117,6 @@
|
||||
text += "<br><font color='red'><B>The [special_role_text] has failed!</B></font>"
|
||||
feedback_add_details("traitor_success","FAIL")
|
||||
to_chat(world, text)
|
||||
|
||||
return 1
|
||||
|
||||
/datum/game_mode/proc/auto_declare_completion_enthralled()
|
||||
@@ -138,7 +135,6 @@
|
||||
text += "body destroyed"
|
||||
text += ")"
|
||||
to_chat(world, text)
|
||||
|
||||
return 1
|
||||
|
||||
/datum/game_mode/proc/forge_vampire_objectives(var/datum/mind/vampire)
|
||||
@@ -185,20 +181,16 @@
|
||||
dat += {"To bite someone, target the head and use harm intent with an empty hand. Drink blood to gain new powers.
|
||||
You are weak to holy things and starlight. Don't go into space and avoid the Chaplain, the chapel and especially Holy Water."}
|
||||
to_chat(vampire.current, dat)
|
||||
|
||||
to_chat(vampire.current, "<B>You must complete the following tasks:</B>")
|
||||
|
||||
|
||||
if (vampire.current.mind)
|
||||
if (vampire.current.mind.assigned_role == "Clown")
|
||||
to_chat(vampire.current, "Your lust for blood has allowed you to overcome your clumsy nature allowing you to wield weapons without harming yourself.")
|
||||
|
||||
vampire.current.mutations.Remove(CLUMSY)
|
||||
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/objective in vampire.objectives)
|
||||
to_chat(vampire.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
|
||||
obj_count++
|
||||
return
|
||||
|
||||
@@ -289,13 +281,11 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
|
||||
while(do_mob(owner, H, 50))
|
||||
if(!(owner.mind in ticker.mode.vampires))
|
||||
to_chat(owner, "<span class='warning'>Your fangs have disappeared!</span>")
|
||||
|
||||
return
|
||||
old_bloodtotal = bloodtotal
|
||||
old_bloodusable = bloodusable
|
||||
if(!H.vessel.get_reagent_amount("blood"))
|
||||
to_chat(src, "<span class='warning'>They've got no blood left to give.</span>")
|
||||
|
||||
break
|
||||
if(H.stat < DEAD)
|
||||
blood = min(20, H.vessel.get_reagent_amount("blood")) // if they have less than 20 blood, give them the remnant else they get 20 blood
|
||||
@@ -306,7 +296,6 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
|
||||
bloodtotal += blood
|
||||
if(old_bloodtotal != bloodtotal)
|
||||
to_chat(owner, "<span class='notice'><b>You have accumulated [bloodtotal] [bloodtotal > 1 ? "units" : "unit"] of blood[bloodusable != old_bloodusable ? ", and have [bloodusable] left to use" : ""].</b></span>")
|
||||
|
||||
check_vampire_upgrade()
|
||||
H.vessel.remove_reagent("blood", 25)
|
||||
if(ishuman(owner))
|
||||
@@ -316,7 +305,6 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
|
||||
draining = null
|
||||
to_chat(owner, "<span class='notice'>You stop draining [H.name] of blood.</span>")
|
||||
|
||||
|
||||
/datum/vampire/proc/check_vampire_upgrade(announce = 1)
|
||||
var/list/old_powers = powers.Copy()
|
||||
|
||||
@@ -334,12 +322,10 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
|
||||
if(istype(p, /obj/effect/proc_holder/spell/vampire))
|
||||
var/obj/effect/proc_holder/spell/vampire/power = p
|
||||
to_chat(owner, "<span class='notice'>[power.gain_desc]</span>")
|
||||
|
||||
else if(istype(p, /datum/vampire_passive))
|
||||
var/datum/vampire_passive/power = p
|
||||
to_chat(owner, "<span class='notice'>[power.gain_desc]</span>")
|
||||
|
||||
|
||||
//prepare for copypaste
|
||||
/datum/game_mode/proc/update_vampire_icons_added(datum/mind/vampire_mind)
|
||||
var/datum/atom_hud/antag/vamp_hud = huds[ANTAG_HUD_VAMPIRE]
|
||||
@@ -366,10 +352,8 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
|
||||
slaved.leave_serv_hud(vampire_mind)
|
||||
update_vampire_icons_removed(vampire_mind)
|
||||
// to_chat(world, "Removed [vampire_mind.current.name] from vampire shit")
|
||||
|
||||
to_chat(vampire_mind.current, "\red <FONT size = 3><B>The fog clouding your mind clears. You remember nothing from the moment you were enthralled until now.</B></FONT>")
|
||||
|
||||
|
||||
/datum/vampire/proc/check_sun()
|
||||
var/ax = owner.x
|
||||
var/ay = owner.y
|
||||
@@ -429,17 +413,13 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha
|
||||
switch(owner.health)
|
||||
if(80 to 100)
|
||||
to_chat(owner, "<span class='warning'>Your skin flakes away...</span>")
|
||||
|
||||
if(60 to 80)
|
||||
to_chat(owner, "<span class='warning'>Your skin sizzles!</span>")
|
||||
|
||||
if((-INFINITY) to 60)
|
||||
if(!owner.on_fire)
|
||||
to_chat(owner, "<span class='danger'>Your skin catches fire!</span>")
|
||||
|
||||
else
|
||||
to_chat(owner, "<span class='danger'>You continue to burn!</span>")
|
||||
|
||||
owner.fire_stacks += 5
|
||||
owner.IgniteMob()
|
||||
owner.emote("scream")
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
return 0
|
||||
if(!ishuman(user))
|
||||
to_chat(user, "<span class='warning'>You are in too weak of a form to do this!</span>")
|
||||
|
||||
return 0
|
||||
|
||||
var/datum/vampire/vampire = user.mind.vampire
|
||||
@@ -32,21 +31,17 @@
|
||||
|
||||
if(user.stat >= DEAD)
|
||||
to_chat(user, "<span class='warning'>Not when you're dead!</span>")
|
||||
|
||||
return 0
|
||||
|
||||
if(vampire.nullified && !fullpower)
|
||||
to_chat(user, "<span class='warning'>Something is blocking your powers!</span>")
|
||||
|
||||
return 0
|
||||
if(vampire.bloodusable < required_blood)
|
||||
to_chat(user, "<span class='warning'>You require at least [required_blood] units of usable blood to do that!</span>")
|
||||
|
||||
return 0
|
||||
//chapel check
|
||||
if(istype(loc.loc, /area/chapel) && !fullpower)
|
||||
to_chat(user, "<span class='warning'>Your powers are useless on this holy ground.</span>")
|
||||
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
@@ -112,7 +107,6 @@
|
||||
if(targets.len)
|
||||
to_chat(usr, "<span class='notice'><b>You have [vampire.bloodusable] left to use.</b></span>")
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/targetted/choose_targets(mob/user = usr)
|
||||
var/list/possible_targets[0]
|
||||
for(var/mob/living/carbon/C in oview_or_orange(range, user, selection_type))
|
||||
@@ -164,7 +158,6 @@
|
||||
usr.SetParalysis(0)
|
||||
U.adjustStaminaLoss(-75)
|
||||
to_chat(usr, "<span class='notice'>You flush your system with clean blood and remove any incapacitating effects.</span>")
|
||||
|
||||
spawn(1)
|
||||
if(usr.mind.vampire.get_ability(/datum/vampire_passive/regen))
|
||||
for(var/i = 1 to 5)
|
||||
@@ -186,14 +179,10 @@
|
||||
if(do_mob(usr, target, 50))
|
||||
if(!affects(target))
|
||||
to_chat(usr, "<span class='warning'>Your piercing gaze fails to knock out [target].</span>")
|
||||
|
||||
to_chat(target, "\blue [usr]'s feeble gaze is ineffective.")
|
||||
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Your piercing gaze knocks out [target].</span>")
|
||||
|
||||
to_chat(target, "<span class='warning'>You find yourself unable to move and barely able to speak.</span>")
|
||||
|
||||
target.Weaken(10)
|
||||
target.Stun(10)
|
||||
target.stuttering = 10
|
||||
@@ -201,7 +190,6 @@
|
||||
revert_cast(usr)
|
||||
to_chat(usr, "<span class='warning'>You broke your gaze.</span>")
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/targetted/disease
|
||||
name = "Diseased Touch (100)"
|
||||
desc = "Touches your victim with infected blood giving them appendicitis, which will, left untreated, cause a slow death by poison."
|
||||
@@ -212,11 +200,9 @@
|
||||
/obj/effect/proc_holder/spell/vampire/targetted/disease/cast(list/targets)
|
||||
for(var/mob/living/carbon/target in targets)
|
||||
to_chat(usr, "<span class='warning'>You stealthily infect [target] with your diseased touch.</span>")
|
||||
|
||||
target.help_shake_act(usr)
|
||||
if(!affects(target))
|
||||
to_chat(usr, "<span class='warning'>They seem to be unaffected.</span>")
|
||||
|
||||
continue
|
||||
var/datum/disease/D = new /datum/disease/appendicitis //someone should probably make a better virus for this
|
||||
target.ForceContractDisease(D)
|
||||
@@ -232,7 +218,6 @@
|
||||
usr.visible_message("<span class='warning'><b>[usr]'s eyes emit a blinding flash!</span>")
|
||||
if(istype(usr:glasses, /obj/item/clothing/glasses/sunglasses/blindfold))
|
||||
to_chat(usr, "<span class='warning'>You're blindfolded!</span>")
|
||||
|
||||
return
|
||||
for(var/mob/living/target in targets)
|
||||
if(!affects(target))
|
||||
@@ -242,7 +227,6 @@
|
||||
target.stuttering = 20
|
||||
to_chat(target, "<span class='warning'>You are blinded by [usr]'s glare.</span>")
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/shapeshift
|
||||
name = "Shapeshift (50)"
|
||||
desc = "Changes your name and appearance at the cost of 50 blood and has a cooldown of 3 minutes."
|
||||
@@ -274,7 +258,6 @@
|
||||
if(!affects(C))
|
||||
continue
|
||||
to_chat(C, "<span class='warning'><font size='3'><b>You hear a ear piercing shriek and your senses dull!</font></b></span>")
|
||||
|
||||
C.Weaken(4)
|
||||
C.ear_deaf = 20
|
||||
C.stuttering = 20
|
||||
@@ -295,10 +278,8 @@
|
||||
for(var/mob/living/target in targets)
|
||||
usr.visible_message("<span class='warning'>[usr] bites [target]'s neck!</span>", "<span class='warning'>You bite [target]'s neck and begin the flow of power.</span>")
|
||||
to_chat(target, "<span class='warning'>You feel the tendrils of evil invade your mind.</span>")
|
||||
|
||||
if(!ishuman(target))
|
||||
to_chat(usr, "<span class='warning'>You can only enthrall humans.</span>")
|
||||
|
||||
break
|
||||
if(do_mob(usr, target, 50))
|
||||
if(can_enthrall(usr, target))
|
||||
@@ -307,7 +288,6 @@
|
||||
revert_cast(usr)
|
||||
to_chat(usr, "<span class='warning'>You or your target either moved or you dont have enough usable blood.</span>")
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/targetted/enthrall/proc/can_enthrall(mob/living/user, mob/living/carbon/C)
|
||||
var/enthrall_safe = 0
|
||||
for(var/obj/item/weapon/implant/loyalty/L in C)
|
||||
@@ -323,7 +303,6 @@
|
||||
return 0
|
||||
if(!C.mind)
|
||||
to_chat(user, "<span class='warning'>[C.name]'s mind is not there for you to enthrall.</span>")
|
||||
|
||||
return 0
|
||||
if(enthrall_safe || ( C.mind in ticker.mode.vampires )||( C.mind.vampire )||( C.mind in ticker.mode.vampire_enthralled ))
|
||||
C.visible_message("<span class='warning'>[C] seems to resist the takeover!</span>", "<span class='notice'>You feel a familiar sensation in your skull that quickly dissipates.</span>")
|
||||
@@ -332,7 +311,6 @@
|
||||
C.visible_message("<span class='warning'>[C] seems to resist the takeover!</span>", "<span class='notice'>Your faith of [ticker.Bible_deity_name] has kept your mind clear of all evil.</span>")
|
||||
if(!ishuman(C))
|
||||
to_chat(user, "<span class='warning'>You can only enthrall humans!</span>")
|
||||
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -357,9 +335,7 @@
|
||||
ticker.mode.vampire_enthralled[H.mind] = user.mind
|
||||
H.mind.special_role = "VampThrall"
|
||||
to_chat(H, "<span class='danger'>You have been Enthralled by [user]. Follow their every command.</span>")
|
||||
|
||||
to_chat(src, "<span class='warning'>You have successfully Enthralled [H]. <i>If they refuse to do as you say just adminhelp.</i></span>")
|
||||
|
||||
log_admin("[ckey(user.key)] has mind-slaved [ckey(H.key)].")
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/self/cloak
|
||||
@@ -385,7 +361,6 @@
|
||||
update_name()
|
||||
to_chat(usr, "<span class='notice'>You will now be [V.iscloaking ? "hidden" : "seen"] in darkness.</span>")
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/bats
|
||||
name = "Summon Bats (75)"
|
||||
desc = "You summon a pair of space bats who attack nearby targets until they or their target is dead."
|
||||
@@ -451,7 +426,6 @@
|
||||
var/mobloc = get_turf(usr.loc)
|
||||
if(get_area(mobloc) == /area/security/armoury/gamma)
|
||||
to_chat(usr, "A strange energy repels you!")
|
||||
|
||||
mobloc = originalloc
|
||||
animation.loc = mobloc
|
||||
steam.location = mobloc
|
||||
@@ -512,7 +486,6 @@
|
||||
if(!turfs.len)
|
||||
revert_cast(user)
|
||||
to_chat(user, "\red You cannot find darkness to step to.")
|
||||
|
||||
return
|
||||
|
||||
perform(turfs)
|
||||
|
||||
@@ -48,7 +48,6 @@
|
||||
if(href_list["school"])
|
||||
if (used)
|
||||
to_chat(H, "You already used this contract!")
|
||||
|
||||
return
|
||||
used = 1
|
||||
var/list/candidates = pollCandidates("Do you want to play as the wizard apprentice of [H.real_name]?", ROLE_WIZARD, 1)
|
||||
@@ -58,30 +57,25 @@
|
||||
var/mob/living/carbon/human/M = new/mob/living/carbon/human(H.loc)
|
||||
M.key = C.key
|
||||
to_chat(M, "<B>You are the [H.real_name]'s apprentice! You are bound by magic contract to follow their orders and help them in accomplishing their goals.")
|
||||
|
||||
switch(href_list["school"])
|
||||
if("destruction")
|
||||
M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(M))
|
||||
M.mind.AddSpell(new /obj/effect/proc_holder/spell/dumbfire/fireball(M))
|
||||
to_chat(M, "<B>Your service has not gone unrewarded, however. Studying under [H.real_name], you have learned powerful, destructive spells. You are able to cast magic missile and fireball.")
|
||||
|
||||
if("bluespace")
|
||||
M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(M))
|
||||
M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(M))
|
||||
to_chat(M, "<B>Your service has not gone unrewarded, however. Studying under [H.real_name], you have learned reality bending mobility spells. You are able to cast teleport and ethereal jaunt.")
|
||||
|
||||
if("healing")
|
||||
M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(M))
|
||||
M.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/forcewall(M))
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/gun/magic/staff/healing(M), slot_r_hand)
|
||||
to_chat(M, "<B>Your service has not gone unrewarded, however. Studying under [H.real_name], you have learned livesaving survival spells. You are able to cast charge and forcewall.")
|
||||
|
||||
if("robeless")
|
||||
M.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(M))
|
||||
M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mind_transfer(M))
|
||||
to_chat(M, "<B>Your service has not gone unrewarded, however. Studying under [H.real_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.")
|
||||
|
||||
|
||||
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
|
||||
@@ -112,7 +106,6 @@
|
||||
else
|
||||
used = 0
|
||||
to_chat(H, "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.")
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -143,7 +136,6 @@
|
||||
to_chat(user, "<span class='danger'>The unearthly energies that powered the blade are now dormant.</span>")
|
||||
|
||||
|
||||
|
||||
/obj/effect/rend
|
||||
name = "tear in the fabric of reality"
|
||||
desc = "You should run now."
|
||||
@@ -221,7 +213,6 @@
|
||||
|
||||
/obj/item/weapon/scrying/attack_self(mob/user as mob)
|
||||
to_chat(user, "<span class='notice'> You can see...everything!</span>")
|
||||
|
||||
visible_message("<span class='danger'>[user] stares into [src], their eyes glazing over.</span>")
|
||||
user.ghostize(1)
|
||||
|
||||
@@ -264,14 +255,12 @@ var/global/list/multiverse = list()
|
||||
/obj/item/weapon/multisword/attack(mob/living/M as mob, mob/living/user as mob) //to prevent accidental friendly fire or out and out grief.
|
||||
if(M.real_name == user.real_name)
|
||||
to_chat(user, "<span class='warning'>The [src] detects benevolent energies in your target and redirects your attack!</span>")
|
||||
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/multisword/attack_self(mob/user)
|
||||
if(user.mind.special_role == "apprentice")
|
||||
to_chat(user, "<span class='warning'>You know better than to touch your teacher's stuff.</span>")
|
||||
|
||||
return
|
||||
if(cooldown < world.time)
|
||||
var/faction_check = 0
|
||||
@@ -284,28 +273,23 @@ var/global/list/multiverse = list()
|
||||
assigned = "[user.real_name]"
|
||||
user.faction = list("[user.real_name]")
|
||||
to_chat(user, "You bind the sword to yourself. You can now use it to summon help.")
|
||||
|
||||
if(!usr.mind.special_role)
|
||||
if(prob(probability_evil))
|
||||
to_chat(user, "<span class='warning'><B>With your new found power you could easily conquer the station!</B></span>")
|
||||
|
||||
var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone
|
||||
hijack_objective.owner = usr.mind
|
||||
usr.mind.objectives += hijack_objective
|
||||
hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!"
|
||||
to_chat(usr, "<B>Objective #[1]</B>: [hijack_objective.explanation_text]")
|
||||
|
||||
ticker.mode.traitors += usr.mind
|
||||
usr.mind.special_role = "[usr.real_name] Prime"
|
||||
evil = TRUE
|
||||
else
|
||||
to_chat(user, "<span class='warning'><B>With your new found power you could easily defend the station!</B></span>")
|
||||
|
||||
var/datum/objective/survive/new_objective = new /datum/objective/survive
|
||||
new_objective.owner = usr.mind
|
||||
new_objective.explanation_text = "Survive, and help defend the innocent from the mobs of multiverse clones."
|
||||
to_chat(usr, "<B>Objective #[1]</B>: [new_objective.explanation_text]")
|
||||
|
||||
usr.mind.objectives += new_objective
|
||||
ticker.mode.traitors += usr.mind
|
||||
usr.mind.special_role = "[usr.real_name] Prime"
|
||||
@@ -322,15 +306,12 @@ var/global/list/multiverse = list()
|
||||
spawn_copy(C.client, get_turf(user.loc), user)
|
||||
to_chat(user, "<span class='warning'><B>The sword flashes, and you find yourself face to face with...you!</B></span>")
|
||||
|
||||
|
||||
else
|
||||
to_chat(user, "You fail to summon any copies of yourself. Perhaps you should try again in a bit.")
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='warning'><B>[src] is recharging! Keep in mind it shares a cooldown with the swords wielded by your copies.</span>")
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/multisword/proc/spawn_copy(var/client/C, var/turf/T, mob/user)
|
||||
var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
|
||||
if(duplicate_self)
|
||||
@@ -340,7 +321,6 @@ var/global/list/multiverse = list()
|
||||
M.key = C.key
|
||||
M.mind.name = user.real_name
|
||||
to_chat(M, "<B>You are an alternate version of [user.real_name] from another universe! Help them accomplish their goals at all costs.</B>")
|
||||
|
||||
M.faction = list("[user.real_name]")
|
||||
if(duplicate_self)
|
||||
M.set_species(user.get_species()) //duplicate the sword user's species.
|
||||
@@ -366,7 +346,6 @@ var/global/list/multiverse = list()
|
||||
M.mind.objectives += hijack_objective
|
||||
hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!"
|
||||
to_chat(M, "<B>Objective #[1]</B>: [hijack_objective.explanation_text]")
|
||||
|
||||
M.mind.special_role = "multiverse traveller"
|
||||
log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] hijack.")
|
||||
else
|
||||
@@ -376,7 +355,6 @@ var/global/list/multiverse = list()
|
||||
new_objective.explanation_text = "Protect [usr.real_name], your copy, and help them defend the innocent from the mobs of multiverse clones."
|
||||
M.mind.objectives += new_objective
|
||||
to_chat(M, "<B>Objective #[1]</B>: [new_objective.explanation_text]")
|
||||
|
||||
M.mind.special_role = "multiverse traveller"
|
||||
log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] protect the station.")
|
||||
|
||||
@@ -652,19 +630,16 @@ var/global/list/multiverse = list()
|
||||
|
||||
if(M.stat != DEAD)
|
||||
to_chat(user, "<span class='warning'>This artifact can only affect the dead!</span>")
|
||||
|
||||
return
|
||||
|
||||
if(!M.mind || !M.client)
|
||||
to_chat(user, "<span class='warning'>There is no soul connected to this body...</span>")
|
||||
|
||||
return
|
||||
|
||||
check_spooky()//clean out/refresh the list
|
||||
|
||||
if(spooky_scaries.len >= 3 && !unlimited)
|
||||
to_chat(user, "<span class='warning'>This artifact can only affect three undead at a time!</span>")
|
||||
|
||||
return
|
||||
if(heresy)
|
||||
spawnheresy(M)//oh god why
|
||||
@@ -675,9 +650,7 @@ var/global/list/multiverse = list()
|
||||
equip_skeleton(M)
|
||||
spooky_scaries |= M
|
||||
to_chat(M, "<span class='userdanger'>You have been revived by </span><B>[user.real_name]!</B>")
|
||||
|
||||
to_chat(M, "<span class='userdanger'>They are your master now, assist them even if it costs you your new life!</span>")
|
||||
|
||||
desc = "A shard capable of resurrecting humans as skeleton thralls[unlimited ? "." : ", [spooky_scaries.len]/3 active thralls."]"
|
||||
|
||||
/obj/item/device/necromantic_stone/proc/check_spooky()
|
||||
@@ -801,19 +774,15 @@ var/global/list/multiverse = list()
|
||||
if(target && cooldown < world.time)
|
||||
if(is_hot(I))
|
||||
to_chat(target, "<span class='userdanger'>You suddenly feel very hot</span>")
|
||||
|
||||
target.bodytemperature += 50
|
||||
GiveHint(target)
|
||||
else if(can_puncture(I))
|
||||
to_chat(target, "<span class='userdanger'>You feel a stabbing pain in [parse_zone(user.zone_sel.selecting)]!</span>")
|
||||
|
||||
target.Weaken(2)
|
||||
GiveHint(target)
|
||||
else if(istype(I,/obj/item/weapon/bikehorn))
|
||||
to_chat(target, "<span class='userdanger'>HONK</span>")
|
||||
|
||||
to_chat(target, 'sound/items/AirHorn.ogg')
|
||||
|
||||
target.ear_damage += rand(0,3)
|
||||
GiveHint(target)
|
||||
cooldown = world.time +cooldown_time
|
||||
@@ -824,7 +793,6 @@ var/global/list/multiverse = list()
|
||||
I.loc = src
|
||||
link = I
|
||||
to_chat(user, "You attach [I] to the doll.")
|
||||
|
||||
update_targets()
|
||||
..()
|
||||
/obj/item/voodoo/check_eye(mob/user as mob)
|
||||
@@ -839,7 +807,6 @@ var/global/list/multiverse = list()
|
||||
target = null
|
||||
link.loc = get_turf(src)
|
||||
to_chat(user, "<span class='notice'>You remove the [link] from the doll.</span>")
|
||||
|
||||
link = null
|
||||
update_targets()
|
||||
return
|
||||
@@ -859,7 +826,6 @@ var/global/list/multiverse = list()
|
||||
user.unset_machine()
|
||||
if("r_leg","l_leg")
|
||||
to_chat(user, "<span class='notice'>You move the doll's legs around.</span>")
|
||||
|
||||
var/turf/T = get_step(target,pick(cardinal))
|
||||
target.Move(T)
|
||||
if("r_arm","l_arm")
|
||||
@@ -875,10 +841,8 @@ var/global/list/multiverse = list()
|
||||
GiveHint(target)
|
||||
if("head")
|
||||
to_chat(user, "<span class='notice'>You smack the doll's head with your hand.</span>")
|
||||
|
||||
target.Dizzy(10)
|
||||
to_chat(target, "<span class='warning'>You suddenly feel as if your head was hit with a hammer!</span>")
|
||||
|
||||
GiveHint(target,user)
|
||||
cooldown = world.time + cooldown_time
|
||||
|
||||
@@ -894,12 +858,10 @@ var/global/list/multiverse = list()
|
||||
if(prob(50) || force)
|
||||
var/way = dir2text(get_dir(victim,get_turf(src)))
|
||||
to_chat(victim, "<span class='notice'>You feel a dark presence from [way]</span>")
|
||||
|
||||
if(prob(20) || force)
|
||||
var/area/A = get_area(src)
|
||||
to_chat(victim, "<span class='notice'>You feel a dark presence from [A.name]</span>")
|
||||
|
||||
|
||||
/obj/item/voodoo/fire_act()
|
||||
if(target)
|
||||
target.adjust_fire_stacks(20)
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
return
|
||||
if(user.lying || user.handcuffed)
|
||||
to_chat(user, "<span class='warning'>You can't reach out!</span>")
|
||||
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -64,7 +63,6 @@
|
||||
return
|
||||
if(user.lying || user.handcuffed)
|
||||
to_chat(user, "<span class='warning'>You can't reach out!</span>")
|
||||
|
||||
return
|
||||
var/mob/M = target
|
||||
M.Stun(2)
|
||||
|
||||
@@ -15,25 +15,19 @@
|
||||
|
||||
/datum/game_mode/wizard/raginmages/announce()
|
||||
to_chat(world, "<B>The current game mode is - Ragin' Mages!</B>")
|
||||
|
||||
to_chat(world, "<B>The \red Space Wizard Federation\black is pissed, help defeat all the space wizards!</B>")
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/wizard/raginmages/greet_wizard(var/datum/mind/wizard, var/you_are=1)
|
||||
if (you_are)
|
||||
to_chat(wizard.current, "<B>\red You are the Space Wizard!</B>")
|
||||
|
||||
to_chat(wizard.current, "<B>The Space Wizards Federation has given you the following tasks:</B>")
|
||||
|
||||
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/objective in wizard.objectives)
|
||||
to_chat(wizard.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
|
||||
obj_count++
|
||||
to_chat(wizard.current, "<b>Objective Alpha</b>: Make sure the station pays for its actions against our diplomats")
|
||||
|
||||
return
|
||||
|
||||
/datum/game_mode/wizard/raginmages/check_finished()
|
||||
@@ -46,21 +40,18 @@
|
||||
if(!istype(wizard.current,/mob/living/carbon))
|
||||
if(istype(get_area(wizard.current), /area/wizard_station)) // We don't want people camping other wizards
|
||||
to_chat(wizard.current, "<span class='warning'>If there aren't any admins on and another wizard is camping you in the wizard lair, report them on the forums</span>")
|
||||
|
||||
message_admins("[wizard.current] was transformed in the wizard lair, another wizard is likely camping")
|
||||
end_squabble(get_area(wizard.current))
|
||||
continue
|
||||
if(istype(wizard.current,/mob/living/carbon/brain))
|
||||
if(istype(get_area(wizard.current), /area/wizard_station)) // We don't want people camping other wizards
|
||||
to_chat(wizard.current, "<span class='warning'>If there aren't any admins on and another wizard is camping you in the wizard lair, report them on the forums</span>")
|
||||
|
||||
message_admins("[wizard.current] was brainified in the wizard lair, another wizard is likely camping")
|
||||
end_squabble(get_area(wizard.current))
|
||||
continue
|
||||
if(wizard.current.stat==DEAD)
|
||||
if(istype(get_area(wizard.current), /area/wizard_station)) // We don't want people camping other wizards
|
||||
to_chat(wizard.current, "<span class='warning'>If there aren't any admins on and another wizard is camping you in the wizard lair, report them on the forums</span>")
|
||||
|
||||
message_admins("[wizard.current] died in the wizard lair, another wizard is likely camping")
|
||||
end_squabble(get_area(wizard.current))
|
||||
continue
|
||||
@@ -68,17 +59,14 @@
|
||||
if(wizard.current.health < 0)
|
||||
if(istype(get_area(wizard.current), /area/wizard_station))
|
||||
to_chat(wizard.current, "<span class='warning'>If there aren't any admins on and another wizard is camping you in the wizard lair, report them on the forums</span>")
|
||||
|
||||
message_admins("[wizard.current] went into crit in the wizard lair, another wizard is likely camping")
|
||||
end_squabble(get_area(wizard.current))
|
||||
else
|
||||
to_chat(wizard.current, "\red <font size='4'>The Space Wizard Federation is upset with your performance and have terminated your employment.</font>")
|
||||
|
||||
wizard.current.gib() // *REAL* ACTION!! *REAL* DRAMA!! *REAL* BLOODSHED!!
|
||||
continue
|
||||
if(wizard.current.client && wizard.current.client.is_afk() > 10 * 60 * 10) // 10 minutes
|
||||
to_chat(wizard.current, "\red <font size='4'>The Space Wizard Federation is upset with your performance and have terminated your employment.</font>")
|
||||
|
||||
wizard.current.gib() // Let's keep the round moving
|
||||
continue
|
||||
if(!wizard.current.client)
|
||||
@@ -113,7 +101,6 @@
|
||||
for(var/mob/living/L in marked_for_death)
|
||||
if(L.stat == CONSCIOUS) // Probably a troublemaker - I'd like to see YOU fight when unconscious
|
||||
to_chat(L, "<span class='userdanger'>STOP FIGHTING.</span>")
|
||||
|
||||
L.ghostize()
|
||||
if(istype(L, /mob/living/carbon/brain))
|
||||
// diediedie
|
||||
@@ -198,5 +185,4 @@
|
||||
if(finished)
|
||||
feedback_set_details("round_end_result","loss - wizard killed")
|
||||
to_chat(world, "\red <FONT size = 3><B> The crew has managed to hold off the wizard attack! The Space Wizards Federation has been taught a lesson they will not soon forget!</B></FONT>")
|
||||
|
||||
..(1)
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
var/list/magicspeciallist = list("staffchange","staffanimation", "wandbelt", "contract", "staffchaos","necromantic")
|
||||
|
||||
to_chat(usr, "<B>You summoned [summon_type ? "magic" : "guns"]!</B>")
|
||||
|
||||
message_admins("[key_name_admin(usr)] summoned [summon_type ? "magic" : "guns"]!")
|
||||
|
||||
for(var/mob/living/carbon/human/H in player_list)
|
||||
@@ -138,7 +137,6 @@
|
||||
H.see_in_dark = 8
|
||||
H.see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
||||
to_chat(H, "<span class='notice'>The walls suddenly disappear.</span>")
|
||||
|
||||
if("voodoo")
|
||||
new /obj/item/voodoo(get_turf(H))
|
||||
if("special")
|
||||
@@ -157,4 +155,3 @@
|
||||
if("necromantic")
|
||||
new /obj/item/device/necromantic_stone(get_turf(H))
|
||||
to_chat(H, "<span class='notice'>You suddenly feel lucky.</span>")
|
||||
|
||||
|
||||
@@ -20,12 +20,10 @@
|
||||
|
||||
if(M.has_brain_worms()) //Borer stuff - RR
|
||||
to_chat(user, "<span class='warning'>This being is corrupted by an alien intelligence and cannot be soul trapped.</span>")
|
||||
|
||||
return ..()
|
||||
|
||||
if(jobban_isbanned(M, "cultist") || jobban_isbanned(M, "Syndicate"))
|
||||
to_chat(user, "<span class='warning'>A mysterious force prevents you from trapping this being's soul.</span>")
|
||||
|
||||
return ..()
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their soul captured with [src.name] by [key_name(user)]</font>")
|
||||
@@ -84,7 +82,6 @@
|
||||
A.status_flags &= ~GODMODE
|
||||
A.canmove = 1
|
||||
to_chat(A, "<b>You have been released from your prison, but you are still bound to [U.name]'s will. Help them suceed in their goals at all costs.</b>")
|
||||
|
||||
A.loc = U.loc
|
||||
A.cancel_camera()
|
||||
src.icon_state = "soulstone"
|
||||
@@ -112,19 +109,15 @@
|
||||
var/obj/item/device/soulstone/C = src
|
||||
if(C.imprinted != "empty")
|
||||
to_chat(U, "\red <b>Capture failed!</b>: \black The soul stone has already been imprinted with [C.imprinted]'s mind!")
|
||||
|
||||
else
|
||||
if (T.stat == 0)
|
||||
to_chat(U, "\red <b>Capture failed!</b>: \black Kill or maim the victim first!")
|
||||
|
||||
else
|
||||
if(T.client == null)
|
||||
to_chat(U, "\red <b>Capture failed!</b>: \black The soul has already fled it's mortal frame.")
|
||||
|
||||
else
|
||||
if(C.contents.len)
|
||||
to_chat(U, "\red <b>Capture failed!</b>: \black The soul stone is full! Use or free an existing soul to make room.")
|
||||
|
||||
else
|
||||
for(var/obj/item/W in T)
|
||||
T.unEquip(W)
|
||||
@@ -149,11 +142,8 @@
|
||||
C.icon_state = "soulstone2"
|
||||
C.name = "Soul Stone: [S.real_name]"
|
||||
to_chat(S, "Your soul has been captured! You are now bound to [U.name]'s will, help them suceed in their goals at all costs.")
|
||||
|
||||
to_chat(U, "\blue <b>Capture successful!</b>: \black [T.real_name]'s soul has been ripped from their body and stored within the soul stone.")
|
||||
|
||||
to_chat(U, "The soulstone has been imprinted with [S.real_name]'s mind, it will no longer react to other souls.")
|
||||
|
||||
C.imprinted = "[S.name]"
|
||||
qdel(T)
|
||||
if("SHADE")
|
||||
@@ -161,15 +151,12 @@
|
||||
var/obj/item/device/soulstone/C = src
|
||||
if (T.stat == DEAD)
|
||||
to_chat(U, "\red <b>Capture failed!</b>: \black The shade has already been banished!")
|
||||
|
||||
else
|
||||
if(C.contents.len)
|
||||
to_chat(U, "\red <b>Capture failed!</b>: \black The soul stone is full! Use or free an existing soul to make room.")
|
||||
|
||||
else
|
||||
if(T.name != C.imprinted)
|
||||
to_chat(U, "\red <b>Capture failed!</b>: \black The soul stone has already been imprinted with [C.imprinted]'s mind!")
|
||||
|
||||
else
|
||||
T.loc = C //put shade in stone
|
||||
T.status_flags |= GODMODE
|
||||
@@ -178,9 +165,7 @@
|
||||
T.faction |= "\ref[U]"
|
||||
C.icon_state = "soulstone2"
|
||||
to_chat(T, "Your soul has been recaptured by the soul stone, its arcane energies are reknitting your ethereal form")
|
||||
|
||||
to_chat(U, "\blue <b>Capture successful!</b>: \black [T.name]'s has been recaptured and stored within the soul stone.")
|
||||
|
||||
if("CONSTRUCT")
|
||||
var/obj/structure/constructshell/T = target
|
||||
var/obj/item/device/soulstone/C = src
|
||||
@@ -200,9 +185,7 @@
|
||||
ticker.mode.update_cult_icons_added(Z.mind)
|
||||
qdel(T)
|
||||
to_chat(Z, "<B>You are a Juggernaut. Though slow, your shell can withstand extreme punishment, create shield walls and even deflect energy weapons, and rip apart enemies and walls alike.</B>")
|
||||
|
||||
to_chat(Z, "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>")
|
||||
|
||||
Z.cancel_camera()
|
||||
qdel(C)
|
||||
|
||||
@@ -218,9 +201,7 @@
|
||||
ticker.mode.update_cult_icons_added(Z.mind)
|
||||
qdel(T)
|
||||
to_chat(Z, "<B>You are a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls.</B>")
|
||||
|
||||
to_chat(Z, "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>")
|
||||
|
||||
Z.cancel_camera()
|
||||
qdel(C)
|
||||
|
||||
@@ -236,14 +217,11 @@
|
||||
ticker.mode.update_cult_icons_added(Z.mind)
|
||||
qdel(T)
|
||||
to_chat(Z, "<B>You are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, use magic missile, repair allied constructs (by clicking on them), </B><I>and most important of all create new constructs</I><B> (Use your Artificer spell to summon a new construct shell and Summon Soulstone to create a new soulstone).</B>")
|
||||
|
||||
to_chat(Z, "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>")
|
||||
|
||||
Z.cancel_camera()
|
||||
qdel(C)
|
||||
else
|
||||
to_chat(U, "\red <b>Creation failed!</b>: \black The soul stone is empty! Go kill someone!")
|
||||
|
||||
return
|
||||
|
||||
/proc/makeNewConstruct(var/mob/living/simple_animal/construct/ctype, var/mob/target, var/mob/stoner = null, cultoverride = 0)
|
||||
@@ -260,11 +238,8 @@
|
||||
ticker.mode.update_cult_icons_added(newstruct.mind)
|
||||
if(stoner && iswizard(stoner))
|
||||
to_chat(newstruct, "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>")
|
||||
|
||||
else if(stoner && iscultist(stoner))
|
||||
to_chat(newstruct, "<B>You are still bound to serve the cult, follow their orders and help them complete their goals at all costs.</B>")
|
||||
|
||||
else
|
||||
to_chat(newstruct, "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>")
|
||||
|
||||
newstruct.cancel_camera()
|
||||
@@ -27,7 +27,6 @@
|
||||
if(initial(S.name) == initial(aspell.name)) // Not using directly in case it was learned from one spellbook then upgraded in another
|
||||
if(aspell.spell_level >= aspell.level_max)
|
||||
to_chat(user, "<span class='warning'>This spell cannot be improved further.</span>")
|
||||
|
||||
return 0
|
||||
else
|
||||
aspell.name = initial(aspell.name)
|
||||
@@ -38,29 +37,23 @@
|
||||
switch(aspell.spell_level)
|
||||
if(1)
|
||||
to_chat(user, "<span class='notice'>You have improved [aspell.name] into Efficient [aspell.name].</span>")
|
||||
|
||||
aspell.name = "Efficient [aspell.name]"
|
||||
if(2)
|
||||
to_chat(user, "<span class='notice'>You have further improved [aspell.name] into Quickened [aspell.name].</span>")
|
||||
|
||||
aspell.name = "Quickened [aspell.name]"
|
||||
if(3)
|
||||
to_chat(user, "<span class='notice'>You have further improved [aspell.name] into Free [aspell.name].</span>")
|
||||
|
||||
aspell.name = "Free [aspell.name]"
|
||||
if(4)
|
||||
to_chat(user, "<span class='notice'>You have further improved [aspell.name] into Instant [aspell.name].</span>")
|
||||
|
||||
aspell.name = "Instant [aspell.name]"
|
||||
if(aspell.spell_level >= aspell.level_max)
|
||||
to_chat(user, "<span class='notice'>This spell cannot be strengthened any further.</span>")
|
||||
|
||||
return 1
|
||||
//No same spell found - just learn it
|
||||
feedback_add_details("wizard_spell_learned",log_name)
|
||||
user.mind.AddSpell(S)
|
||||
to_chat(user, "<span class='notice'>You have learned [S.name].</span>")
|
||||
|
||||
return 1
|
||||
|
||||
/datum/spellbook_entry/proc/CanRefund(var/mob/living/carbon/human/user,var/obj/item/weapon/spellbook/book)
|
||||
@@ -77,7 +70,6 @@
|
||||
var/area/wizard_station/A = locate()
|
||||
if(!(user in A.contents))
|
||||
to_chat(user, "<span clas=='warning'>You can only refund spells at the wizard lair</span>")
|
||||
|
||||
return -1
|
||||
if(!S)
|
||||
S = new spell_type()
|
||||
@@ -312,7 +304,6 @@
|
||||
user.see_in_dark = 8
|
||||
user.see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
||||
to_chat(user, "\blue The walls suddenly disappear.")
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -435,7 +426,6 @@
|
||||
book.uses += 1
|
||||
active = 1
|
||||
to_chat(user, "<span class='notice'>You have cast summon guns and gained an extra charge for your spellbook.</span>")
|
||||
|
||||
return 1
|
||||
|
||||
/datum/spellbook_entry/summon/magic
|
||||
@@ -459,7 +449,6 @@
|
||||
book.uses += 1
|
||||
active = 1
|
||||
to_chat(user, "<span class='notice'>You have cast summon magic and gained an extra charge for your spellbook.</span>")
|
||||
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/spellbook
|
||||
@@ -498,11 +487,9 @@
|
||||
var/obj/item/weapon/contract/contract = O
|
||||
if(contract.used)
|
||||
to_chat(user, "<span class='warning'>The contract has been used, you can't get your points back now!</span>")
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You feed the contract back into the spellbook, refunding your points.</span>")
|
||||
|
||||
|
||||
uses++
|
||||
|
||||
qdel(O)
|
||||
@@ -510,7 +497,6 @@
|
||||
if(istype(O, /obj/item/weapon/antag_spawner/slaughter_demon))
|
||||
to_chat(user, "<span class='notice'>On second thought, maybe summoning a demon is a bad idea. You refund your points.</span>")
|
||||
|
||||
|
||||
uses++
|
||||
for(var/datum/spellbook_entry/item/bloodbottle/BB in entries)
|
||||
if(!isnull(BB.limit))
|
||||
@@ -570,12 +556,10 @@
|
||||
/obj/item/weapon/spellbook/attack_self(mob/user as mob)
|
||||
if(!owner)
|
||||
to_chat(user, "<span class='notice'>You bind the spellbook to yourself.</span>")
|
||||
|
||||
owner = user
|
||||
return
|
||||
if(user != owner)
|
||||
to_chat(user, "<span class='warning'>The [name] does not recognize you as it's owner and refuses to open!</span>")
|
||||
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat = ""
|
||||
@@ -673,17 +657,14 @@
|
||||
if(user.mind)
|
||||
if(user.mind.special_role == "apprentice" || user.mind.special_role == "Wizard")
|
||||
to_chat(user, "<span class='notice'>You're already far more versed in this spell than this flimsy how-to book can provide.</span>")
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You've already read this one.</span>")
|
||||
|
||||
return
|
||||
if(used)
|
||||
recoil(user)
|
||||
else
|
||||
user.mind.AddSpell(S)
|
||||
to_chat(user, "<span class='notice'>you rapidly read through the arcane book. Suddenly you realize you understand [spellname]!</span>")
|
||||
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='orange'>[user.real_name] ([user.ckey]) learned the spell [spellname] ([S]).</font>")
|
||||
onlearned(user)
|
||||
|
||||
@@ -718,7 +699,6 @@
|
||||
/obj/item/weapon/spellbook/oneuse/smoke/recoil(mob/user as mob)
|
||||
..()
|
||||
to_chat(user, "<span class='caution'>Your stomach rumbles...</span>")
|
||||
|
||||
if(user.nutrition)
|
||||
user.nutrition -= 200
|
||||
if(user.nutrition <= 0)
|
||||
@@ -733,7 +713,6 @@
|
||||
/obj/item/weapon/spellbook/oneuse/blind/recoil(mob/user as mob)
|
||||
..()
|
||||
to_chat(user, "<span class='warning'>You go blind!</span>")
|
||||
|
||||
user.eye_blind = 10
|
||||
|
||||
/obj/item/weapon/spellbook/oneuse/mindswap
|
||||
@@ -756,11 +735,9 @@
|
||||
if(!stored_swap)
|
||||
stored_swap = user
|
||||
to_chat(user, "<span class='warning'>For a moment you feel like you don't even know who you are anymore.</span>")
|
||||
|
||||
return
|
||||
if(stored_swap == user)
|
||||
to_chat(user, "<span class='notice'>You stare at the book some more, but there doesn't seem to be anything else to learn...</span>")
|
||||
|
||||
return
|
||||
|
||||
if(user.mind.special_verbs.len)
|
||||
@@ -790,9 +767,7 @@
|
||||
user.verbs += V
|
||||
|
||||
to_chat(stored_swap, "<span class='warning'>You're suddenly somewhere else... and someone else?!</span>")
|
||||
|
||||
to_chat(user, "<span class='warning'>Suddenly you're staring at [src] again... where are you, who are you?!</span>")
|
||||
|
||||
stored_swap = null
|
||||
|
||||
/obj/item/weapon/spellbook/oneuse/forcewall
|
||||
@@ -804,7 +779,6 @@
|
||||
/obj/item/weapon/spellbook/oneuse/forcewall/recoil(mob/user as mob)
|
||||
..()
|
||||
to_chat(user, "<span class='warning'>You suddenly feel very solid!</span>")
|
||||
|
||||
var/obj/structure/closet/statue/S = new /obj/structure/closet/statue(user.loc, user)
|
||||
S.timer = 30
|
||||
user.drop_item()
|
||||
@@ -819,7 +793,6 @@
|
||||
/obj/item/weapon/spellbook/oneuse/knock/recoil(mob/user as mob)
|
||||
..()
|
||||
to_chat(user, "<span class='warning'>You're knocked down!</span>")
|
||||
|
||||
user.Weaken(20)
|
||||
|
||||
/obj/item/weapon/spellbook/oneuse/horsemask
|
||||
@@ -831,7 +804,6 @@
|
||||
/obj/item/weapon/spellbook/oneuse/horsemask/recoil(mob/living/carbon/user as mob)
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
to_chat(user, "<font size='15' color='red'><b>HOR-SIE HAS RISEN</b></font>")
|
||||
|
||||
var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead
|
||||
magichead.flags |= NODROP //curses!
|
||||
magichead.flags_inv = null //so you can still see their face
|
||||
@@ -843,7 +815,6 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>I say thee neigh</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/spellbook/oneuse/charge
|
||||
spell = /obj/effect/proc_holder/spell/targeted/charge
|
||||
spellname = "charging"
|
||||
@@ -853,7 +824,6 @@
|
||||
/obj/item/weapon/spellbook/oneuse/charge/recoil(mob/user as mob)
|
||||
..()
|
||||
to_chat(user, "<span class='warning'>[src] suddenly feels very warm!</span>")
|
||||
|
||||
empulse(src, 1, 1)
|
||||
|
||||
/obj/item/weapon/spellbook/oneuse/summonitem
|
||||
@@ -865,7 +835,6 @@
|
||||
/obj/item/weapon/spellbook/oneuse/summonitem/recoil(mob/user as mob)
|
||||
..()
|
||||
to_chat(user, "<span class='warning'>[src] suddenly vanishes!</span>")
|
||||
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
@@ -18,11 +18,9 @@
|
||||
|
||||
/datum/game_mode/wizard/announce()
|
||||
to_chat(world, "<B>The current game mode is - Wizard!</B>")
|
||||
|
||||
to_chat(world, "<B>There is a \red SPACE WIZARD\black on the station. You can't let him achieve his objective!</B>")
|
||||
|
||||
|
||||
|
||||
/datum/game_mode/wizard/can_start()//This could be better, will likely have to recode it later
|
||||
if(!..())
|
||||
return 0
|
||||
@@ -38,7 +36,6 @@
|
||||
wizard.original = wizard.current
|
||||
if(wizardstart.len == 0)
|
||||
to_chat(wizard.current, "<B>\red A starting location for you could not be found, please report this bug!</B>")
|
||||
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -151,14 +148,11 @@
|
||||
/datum/game_mode/proc/greet_wizard(var/datum/mind/wizard, var/you_are=1)
|
||||
if (you_are)
|
||||
to_chat(wizard.current, "<B>\red You are the Space Wizard!</B>")
|
||||
|
||||
to_chat(wizard.current, "<B>The Space Wizards Federation has given you the following tasks:</B>")
|
||||
|
||||
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/objective in wizard.objectives)
|
||||
to_chat(wizard.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
|
||||
obj_count++
|
||||
return
|
||||
|
||||
@@ -202,9 +196,7 @@
|
||||
wizard_mob.species.equip(wizard_mob)
|
||||
|
||||
to_chat(wizard_mob, "You will find a list of available spells in your spell book. Choose your magic arsenal carefully.")
|
||||
|
||||
to_chat(wizard_mob, "In your pockets you will find a teleport scroll. Use it as needed.")
|
||||
|
||||
wizard_mob.mind.store_memory("<B>Remember:</B> do not forget to prepare your spells.")
|
||||
wizard_mob.update_icons()
|
||||
return 1
|
||||
@@ -240,7 +232,6 @@
|
||||
if(finished && !ragin)
|
||||
feedback_set_details("round_end_result","loss - wizard killed")
|
||||
to_chat(world, "\red <FONT size = 3><B> The wizard[(wizards.len>1)?"s":""] has been killed by the crew! The Space Wizards Federation has been taught a lesson they will not soon forget!</B></FONT>")
|
||||
|
||||
..()
|
||||
return 1
|
||||
|
||||
@@ -292,7 +283,6 @@
|
||||
text += "<br>"
|
||||
|
||||
to_chat(world, text)
|
||||
|
||||
return 1
|
||||
|
||||
//OTHER PROCS
|
||||
@@ -318,15 +308,12 @@ Made a proc so this is not repeated 14 (or more) times.*/
|
||||
//Removed the stat check because not all spells require clothing now.
|
||||
if(!istype(usr:wear_suit, /obj/item/clothing/suit/wizrobe))
|
||||
to_chat(usr, "I don't feel strong enough without my robe.")
|
||||
|
||||
return 0
|
||||
if(!istype(usr:shoes, /obj/item/clothing/shoes/sandal))
|
||||
to_chat(usr, "I don't feel strong enough without my sandals.")
|
||||
|
||||
return 0
|
||||
if(!istype(usr:head, /obj/item/clothing/head/wizard))
|
||||
to_chat(usr, "I don't feel strong enough without my hat.")
|
||||
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
|
||||
@@ -19,10 +19,8 @@
|
||||
|
||||
/datum/game_mode/xenos/announce()
|
||||
to_chat(world, "<B>The current game mode is - Xenos!</B>")
|
||||
|
||||
to_chat(world, "<B>There is an Xenomorph attack on the station.<BR>Aliens - Kill or infect the crew. Protect the Queen. <BR>Crew - Protect the station. Exterminate all aliens.</B>")
|
||||
|
||||
|
||||
/datum/game_mode/xenos/can_start()
|
||||
if(!..())
|
||||
return 0
|
||||
@@ -160,28 +158,20 @@
|
||||
if(station_was_nuked)
|
||||
feedback_set_details("round_end_result","win - xenos nuked")
|
||||
to_chat(world, "<FONT size = 3><B>Crew Victory</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>The station was destroyed in a nuclear explosion, preventing the aliens from overrunning it!</B>")
|
||||
|
||||
else if(result == 1)
|
||||
feedback_set_details("round_end_result","win - xenos killed")
|
||||
to_chat(world, "<FONT size = 3><B>Crew Victory</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>The aliens did not succeed and were exterminated by the crew!</B>")
|
||||
|
||||
else if(result == 2)
|
||||
feedback_set_details("round_end_result","win - crew killed")
|
||||
to_chat(world, "<FONT size = 3><B>Alien Victory</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>The aliens were successful and slaughtered the crew!</B>")
|
||||
|
||||
else
|
||||
feedback_set_details("round_end_result","win - crew escaped")
|
||||
to_chat(world, "<FONT size = 3><B>Draw</B></FONT>")
|
||||
|
||||
to_chat(world, "<B>The crew has escaped from the aliens but did not exterminate them, allowing them to overrun the station.</B>")
|
||||
|
||||
|
||||
var/text = "<br><FONT size=3><B>There were [xenos.len] aliens.</B></FONT>"
|
||||
text += "<br><FONT size=3><B>The aliens were:</B></FONT>"
|
||||
for(var/datum/mind/xeno in xenos)
|
||||
@@ -198,6 +188,5 @@
|
||||
text += ")"
|
||||
to_chat(world, text)
|
||||
|
||||
|
||||
..()
|
||||
return 1
|
||||
@@ -146,7 +146,6 @@
|
||||
if("No")
|
||||
if(outoftime)
|
||||
to_chat(H, "Welp, out of time, buddy. You're stuck. Next time choose faster.")
|
||||
|
||||
accepted = 1
|
||||
|
||||
if(ticker)
|
||||
|
||||
@@ -18,7 +18,6 @@ var/global/datum/controller/occupations/job_master
|
||||
var/list/all_jobs = subtypesof(/datum/job)
|
||||
if(!all_jobs.len)
|
||||
to_chat(world, "\red \b Error setting up jobs, no job datums found")
|
||||
|
||||
return 0
|
||||
for(var/J in all_jobs)
|
||||
var/datum/job/job = new J()
|
||||
@@ -386,7 +385,6 @@ var/global/datum/controller/occupations/job_master
|
||||
else
|
||||
to_chat(H, "Your job is [rank] and the game just can't handle it! Please report this bug to an administrator.")
|
||||
|
||||
|
||||
H.job = rank
|
||||
|
||||
if(!joined_late)
|
||||
@@ -435,7 +433,6 @@ var/global/datum/controller/occupations/job_master
|
||||
spawn(0)
|
||||
to_chat(H, "\blue<b>Your account number is: [M.account_number], your account pin is: [M.remote_access_pin]</b>")
|
||||
|
||||
|
||||
var/alt_title = null
|
||||
if(H.mind)
|
||||
H.mind.assigned_role = rank
|
||||
@@ -468,13 +465,10 @@ var/global/datum/controller/occupations/job_master
|
||||
H.species.equip(H)
|
||||
|
||||
to_chat(H, "<B>You are the [alt_title ? alt_title : rank].</B>")
|
||||
|
||||
to_chat(H, "<b>As the [alt_title ? alt_title : rank] you answer directly to [job.supervisors]. Special circumstances may change this.</b>")
|
||||
|
||||
if(job.req_admin_notify)
|
||||
to_chat(H, "<b>You are playing a job that is important for the game progression. If you have to disconnect, please notify the admins via adminhelp.</b>")
|
||||
|
||||
|
||||
spawnId(H, rank, alt_title)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset(H), slot_l_ear)
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ var/list/whitelist = list()
|
||||
return 1
|
||||
if(!dbcon.IsConnected())
|
||||
to_chat(usr, "\red Unable to connect to whitelist database. Please try again later.<br>")
|
||||
|
||||
return 0
|
||||
else
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT job FROM [format_table_name("whitelist")] WHERE ckey='[M.key]'")
|
||||
@@ -71,7 +70,6 @@ var/list/whitelist = list()
|
||||
return 0
|
||||
if(!dbcon.IsConnected())
|
||||
to_chat(usr, "\red Unable to connect to whitelist database. Please try again later.<br>")
|
||||
|
||||
return 0
|
||||
else
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT species FROM [format_table_name("whitelist")] WHERE ckey='[M.key]'")
|
||||
|
||||
@@ -61,7 +61,6 @@
|
||||
if (istype(I, /obj/item/weapon/wrench))
|
||||
if(!panel_open)
|
||||
to_chat(user, "<span class='notice'>Open the maintenance panel first.</span>")
|
||||
|
||||
return
|
||||
var/list/choices = list("West" = WEST, "East" = EAST, "South" = SOUTH, "North" = NORTH)
|
||||
var/selected = input(user,"Select a direction for the connector.", "Connector Direction") in choices
|
||||
@@ -94,7 +93,6 @@
|
||||
/obj/machinery/atmospherics/unary/cold_sink/freezer/attack_hand(mob/user as mob)
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
|
||||
return
|
||||
|
||||
src.ui_interact(user)
|
||||
@@ -223,7 +221,6 @@
|
||||
if (istype(I, /obj/item/weapon/wrench))
|
||||
if(!panel_open)
|
||||
to_chat(user, "<span class='notice'>Open the maintenance panel first.</span>")
|
||||
|
||||
return
|
||||
var/list/choices = list("West" = WEST, "East" = EAST, "South" = SOUTH, "North" = NORTH)
|
||||
var/selected = input(user,"Select a direction for the connector.", "Connector Direction") in choices
|
||||
@@ -256,7 +253,6 @@
|
||||
/obj/machinery/atmospherics/unary/heat_reservoir/heater/attack_hand(mob/user as mob)
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
|
||||
return
|
||||
src.ui_interact(user)
|
||||
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
/obj/machinery/optable/attack_hand(mob/user as mob)
|
||||
if (HULK in usr.mutations)
|
||||
to_chat(usr, text("\blue You destroy the table."))
|
||||
|
||||
visible_message("\red [usr] destroys the operating table!")
|
||||
src.density = 0
|
||||
qdel(src)
|
||||
@@ -131,7 +130,6 @@
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 20, target = src))
|
||||
to_chat(user, "<span class='notice'>You deconstruct the table.</span>")
|
||||
|
||||
new /obj/item/stack/sheet/plasteel(loc, 5)
|
||||
qdel(src)
|
||||
|
||||
@@ -139,12 +137,10 @@
|
||||
/obj/machinery/optable/proc/check_table(mob/living/carbon/patient as mob)
|
||||
if(src.victim && get_turf(victim) == get_turf(src) && victim.lying)
|
||||
to_chat(usr, "<span class='notice'>The table is already occupied!</span>")
|
||||
|
||||
return 0
|
||||
|
||||
if(patient.buckled)
|
||||
to_chat(usr, "<span class='notice'>Unbuckle first!</span>")
|
||||
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
@@ -44,7 +44,6 @@
|
||||
if(istype(O, /obj/item/device/pda))
|
||||
if(storedpda)
|
||||
to_chat(user, "There is already a PDA inside.")
|
||||
|
||||
return
|
||||
else
|
||||
var/obj/item/device/pda/P = usr.get_active_hand()
|
||||
@@ -76,7 +75,6 @@
|
||||
to_chat(user, "<span class='notice'>The [src] is empty.</span>")
|
||||
|
||||
|
||||
|
||||
/obj/machinery/pdapainter/verb/ejectpda()
|
||||
set name = "Eject PDA"
|
||||
set category = "Object"
|
||||
@@ -90,7 +88,6 @@
|
||||
to_chat(usr, "<span class='notice'>The [src] is empty.</span>")
|
||||
|
||||
|
||||
|
||||
/obj/machinery/pdapainter/power_change()
|
||||
..()
|
||||
update_icon()
|
||||
@@ -84,7 +84,6 @@
|
||||
if (istype(G, /obj/item/weapon/wrench))
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
|
||||
return
|
||||
if(dir == 4)
|
||||
orient = "LEFT"
|
||||
@@ -111,7 +110,6 @@
|
||||
|
||||
if (panel_open)
|
||||
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
|
||||
return
|
||||
|
||||
if (!src.connected)
|
||||
@@ -229,7 +227,6 @@
|
||||
|
||||
if(panel_open)
|
||||
to_chat(usr, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
|
||||
return 0
|
||||
|
||||
if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon/ai)))
|
||||
@@ -238,12 +235,10 @@
|
||||
if (src.connected.occupant)
|
||||
if (src.connected.occupant.stat == DEAD)
|
||||
to_chat(usr, "<span class='danger'>This person has no life for to preserve anymore. Take them to a department capable of reanimating them.</span>")
|
||||
|
||||
else if(src.connected.occupant.health > src.connected.min_health || (href_list["chemical"] in connected.emergency_chems))
|
||||
src.connected.inject_chemical(usr,href_list["chemical"],text2num(href_list["amount"]))
|
||||
else
|
||||
to_chat(usr, "<span class='danger'>This person is not in good enough condition for sleepers to be effective! Use another means of treatment, such as cryogenics!</span>")
|
||||
|
||||
if (href_list["removebeaker"])
|
||||
src.connected.remove_beaker()
|
||||
if (href_list["togglefilter"])
|
||||
@@ -357,7 +352,6 @@
|
||||
addiction_removal_chance = 10
|
||||
if(prob(addiction_removal_chance))
|
||||
to_chat(occupant, "<span class='notice'>You no longer feel reliant on [R.name]!</span>")
|
||||
|
||||
occupant.reagents.addiction_list.Remove(R)
|
||||
|
||||
updateDialog()
|
||||
@@ -378,7 +372,6 @@
|
||||
if(!beaker)
|
||||
if (!user.drop_item())
|
||||
to_chat(user, "<span class='warning'>\The [G] is stuck to you!</span>")
|
||||
|
||||
return
|
||||
|
||||
beaker = G
|
||||
@@ -388,13 +381,11 @@
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The sleeper has a beaker already.</span>")
|
||||
|
||||
return
|
||||
|
||||
if (istype(G, /obj/item/weapon/screwdriver))
|
||||
if(src.occupant)
|
||||
to_chat(user, "<span class='notice'>The maintenance panel is locked.</span>")
|
||||
|
||||
return
|
||||
default_deconstruction_screwdriver(user, "sleeper-o", "sleeper-open", G)
|
||||
return
|
||||
@@ -402,11 +393,9 @@
|
||||
if (istype(G, /obj/item/weapon/wrench))
|
||||
if(src.occupant)
|
||||
to_chat(user, "<span class='notice'>The scanner is occupied.</span>")
|
||||
|
||||
return
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
|
||||
return
|
||||
if(dir == 4)
|
||||
orient = "LEFT"
|
||||
@@ -424,18 +413,15 @@
|
||||
if(istype(G, /obj/item/weapon/grab))
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='boldnotice'>Close the maintenance panel first.</span>")
|
||||
|
||||
return
|
||||
if(!ismob(G:affecting))
|
||||
return
|
||||
if(src.occupant)
|
||||
to_chat(user, "<span class='boldnotice'>The sleeper is already occupied!</span>")
|
||||
|
||||
return
|
||||
for(var/mob/living/carbon/slime/M in range(1,G:affecting))
|
||||
if(M.Victim == G:affecting)
|
||||
to_chat(usr, "[G:affecting.name] will not fit into the sleeper because they have a slime latched onto their head.")
|
||||
|
||||
return
|
||||
|
||||
visible_message("[user] starts putting [G:affecting:name] into the sleeper.")
|
||||
@@ -443,7 +429,6 @@
|
||||
if(do_after(user, 20, target = G:affecting))
|
||||
if(src.occupant)
|
||||
to_chat(user, "<span class='boldnotice'>The sleeper is already occupied!</span>")
|
||||
|
||||
return
|
||||
if(!G || !G:affecting) return
|
||||
var/mob/M = G:affecting
|
||||
@@ -455,7 +440,6 @@
|
||||
src.icon_state = "sleeper"
|
||||
to_chat(M, "<span class='boldnotice'>You feel cool air surround you. You go numb as your senses turn inward.</span>")
|
||||
|
||||
|
||||
src.add_fingerprint(user)
|
||||
qdel(G)
|
||||
return
|
||||
@@ -537,7 +521,6 @@
|
||||
/obj/machinery/sleeper/proc/inject_chemical(mob/living/user as mob, chemical, amount)
|
||||
if (!(chemical in injection_chems))
|
||||
to_chat(user, "<span class='notice'>The sleeper does not offer that chemical!</notice>")
|
||||
|
||||
return
|
||||
|
||||
if(src.occupant)
|
||||
@@ -547,15 +530,12 @@
|
||||
return
|
||||
else
|
||||
to_chat(user, "You can not inject any more of this chemical.")
|
||||
|
||||
return
|
||||
else
|
||||
to_chat(user, "The patient rejects the chemicals!")
|
||||
|
||||
return
|
||||
else
|
||||
to_chat(user, "There's no occupant in the sleeper!")
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/sleeper/verb/eject()
|
||||
@@ -601,23 +581,19 @@
|
||||
return
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='boldnotice'>Close the maintenance panel first.</span>")
|
||||
|
||||
return
|
||||
if(occupant)
|
||||
to_chat(user, "<span class='boldnotice'>The sleeper is already occupied!</span>")
|
||||
|
||||
return
|
||||
var/mob/living/L = O
|
||||
if(!istype(L) || L.buckled)
|
||||
return
|
||||
if(L.abiotic())
|
||||
to_chat(user, "<span class='boldnotice'>Subject cannot have abiotic items on.</span>")
|
||||
|
||||
return
|
||||
for(var/mob/living/carbon/slime/M in range(1,L))
|
||||
if(M.Victim == L)
|
||||
to_chat(usr, "[L.name] will not fit into the sleeper because they have a slime latched onto their head.")
|
||||
|
||||
return
|
||||
if(L == user)
|
||||
visible_message("[user] starts climbing into the sleeper.")
|
||||
@@ -627,7 +603,6 @@
|
||||
if(do_after(user, 20, target = L))
|
||||
if(src.occupant)
|
||||
to_chat(user, "<span class='boldnotice'>>The sleeper is already occupied!</span>")
|
||||
|
||||
return
|
||||
if(!L) return
|
||||
|
||||
@@ -638,7 +613,6 @@
|
||||
src.occupant = L
|
||||
src.icon_state = "sleeper"
|
||||
to_chat(L, "<span class='boldnotice'>You feel cool air surround you. You go numb as your senses turn inward.</span>")
|
||||
|
||||
src.add_fingerprint(user)
|
||||
if(user.pulling == L)
|
||||
user.stop_pulling()
|
||||
@@ -656,24 +630,20 @@
|
||||
return
|
||||
if(src.occupant)
|
||||
to_chat(usr, "<span class='boldnotice'>The sleeper is already occupied!</span>")
|
||||
|
||||
return
|
||||
if (panel_open)
|
||||
to_chat(usr, "<span class='boldnotice'>Close the maintenance panel first.</span>")
|
||||
|
||||
return
|
||||
if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other
|
||||
return
|
||||
for(var/mob/living/carbon/slime/M in range(1,usr))
|
||||
if(M.Victim == usr)
|
||||
to_chat(usr, "You're too busy getting your life sucked out of you.")
|
||||
|
||||
return
|
||||
visible_message("[usr] starts climbing into the sleeper.")
|
||||
if(do_after(usr, 20, target = usr))
|
||||
if(src.occupant)
|
||||
to_chat(usr, "<span class='boldnotice'>The sleeper is already occupied!</span>")
|
||||
|
||||
return
|
||||
usr.stop_pulling()
|
||||
usr.client.perspective = EYE_PERSPECTIVE
|
||||
|
||||
@@ -43,7 +43,6 @@
|
||||
if (istype(G, /obj/item/weapon/screwdriver))
|
||||
if(src.occupant)
|
||||
to_chat(user, "<span class='notice'>The maintenance panel is locked.</span>")
|
||||
|
||||
return
|
||||
default_deconstruction_screwdriver(user, "bodyscanner-o", "bodyscanner-open", G)
|
||||
return
|
||||
@@ -51,11 +50,9 @@
|
||||
if (istype(G, /obj/item/weapon/wrench))
|
||||
if(src.occupant)
|
||||
to_chat(user, "<span class='notice'>The scanner is occupied.</span>")
|
||||
|
||||
return
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
|
||||
return
|
||||
if(dir == 4)
|
||||
dir = 8
|
||||
@@ -72,23 +69,19 @@
|
||||
var/obj/item/weapon/grab/TYPECAST_YOUR_SHIT = G
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
|
||||
return
|
||||
if(!ismob(TYPECAST_YOUR_SHIT.affecting))
|
||||
return
|
||||
if(occupant)
|
||||
to_chat(user, "<span class='notice'>The scanner is already occupied!</span>")
|
||||
|
||||
return
|
||||
for(var/mob/living/carbon/slime/M in range(1, TYPECAST_YOUR_SHIT.affecting))
|
||||
if(M.Victim == TYPECAST_YOUR_SHIT.affecting)
|
||||
to_chat(user, "<span class='danger'>[TYPECAST_YOUR_SHIT.affecting.name] has a fucking slime attached to them, deal with that first.</span>")
|
||||
|
||||
return
|
||||
var/mob/M = TYPECAST_YOUR_SHIT.affecting
|
||||
if(M.abiotic())
|
||||
to_chat(user, "<span class='notice'>Subject cannot have abiotic items on.</span>")
|
||||
|
||||
return
|
||||
/*if(M.client)
|
||||
M.client.perspective = EYE_PERSPECTIVE
|
||||
@@ -113,23 +106,19 @@
|
||||
return 0 //not a borg or human
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
|
||||
return 0 //panel open
|
||||
if(occupant)
|
||||
to_chat(user, "<span class='notice'>\The [src] is already occupied.</span>")
|
||||
|
||||
return 0 //occupied
|
||||
|
||||
if(O.buckled)
|
||||
return 0
|
||||
if(O.abiotic())
|
||||
to_chat(user, "<span class='notice'>Subject cannot have abiotic items on.</span>")
|
||||
|
||||
return 0
|
||||
for(var/mob/living/carbon/slime/M in range(1, O))
|
||||
if(M.Victim == O)
|
||||
to_chat(user, "<span class='danger'>[O] has a fucking slime attached to them, deal with that first.</span>")
|
||||
|
||||
return 0
|
||||
|
||||
if(O == user)
|
||||
@@ -280,7 +269,6 @@
|
||||
if (istype(G, /obj/item/weapon/wrench))
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
|
||||
return
|
||||
if(dir == 4)
|
||||
dir = 8
|
||||
@@ -305,7 +293,6 @@
|
||||
|
||||
if (panel_open)
|
||||
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
|
||||
return
|
||||
|
||||
if(!src.connected)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user