Reduce lines by removing blank lines added by PJ's script

This commit is contained in:
Tigercat2000
2016-04-05 08:25:57 -07:00
parent 9d430844c3
commit 78f53553f8
1049 changed files with 3 additions and 8630 deletions
-3
View File
@@ -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)
-7
View File
@@ -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
-17
View File
@@ -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
-2
View File
@@ -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.")
-2
View File
@@ -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]")
-4
View File
@@ -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]
-32
View File
@@ -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>")
-2
View File
@@ -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
-1
View File
@@ -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.")
-6
View File
@@ -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
-13
View File
@@ -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.")
-11
View File
@@ -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)
-8
View File
@@ -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
-1
View File
@@ -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)
-10
View File
@@ -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
-27
View File
@@ -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>!")
-1
View File
@@ -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
-10
View File
@@ -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
-15
View File
@@ -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)
-2
View File
@@ -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)
-22
View File
@@ -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
-59
View File
@@ -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)
-16
View File
@@ -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()
-1
View File
@@ -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")
-2
View File
@@ -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
-6
View File
@@ -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>")
-28
View File
@@ -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
-16
View File
@@ -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
-4
View File
@@ -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.")
-28
View File
@@ -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>
-25
View File
@@ -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()
-1
View File
@@ -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
-29
View File
@@ -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()
-16
View File
@@ -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.")
-3
View File
@@ -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"
-2
View File
@@ -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()
-2
View File
@@ -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)
-19
View File
@@ -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()
-20
View File
@@ -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)
-38
View File
@@ -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)
-2
View File
@@ -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)
-14
View File
@@ -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>")
-25
View File
@@ -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()
-31
View File
@@ -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)
-13
View File
@@ -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
-11
View File
@@ -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
-1
View File
@@ -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)
-6
View File
@@ -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)
-2
View File
@@ -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]'")
-4
View File
@@ -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)
-4
View File
@@ -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
-3
View File
@@ -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()
-30
View File
@@ -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
-13
View File
@@ -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