Merge branch 'master' of https://github.com/tgstation/-tg-station into goonchem_shoehorn_backup

This commit is contained in:
Iamgoofball
2015-01-16 17:25:50 -08:00
130 changed files with 2634 additions and 983 deletions
+4
View File
@@ -59,6 +59,10 @@
deathsquadspawn += loc
qdel(src)
return
if("Emergencyresponseteam")
emergencyresponseteamspawn += loc
qdel(src)
return
if("xeno_spawn")
xeno_spawn += loc
qdel(src)
+2 -2
View File
@@ -809,7 +809,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if (!P.silent)
playsound(P.loc, 'sound/machines/twobeep.ogg', 50, 1)
P.loc.audible_message("\icon[P] *[P.ttone]*", null, 3)
P.audible_message("\icon[P] *[P.ttone]*", null, 3)
//Search for holder of the PDA.
var/mob/living/L = null
if(P.loc && isliving(P.loc))
@@ -1150,7 +1150,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
else
ntrclog[channel] = msg + ntrclog[channel]
if (findtext(message, nick) && !silent)
loc.audible_message("\icon[src] *[ttone]*", null, 3)
audible_message("\icon[src] *[ttone]*", null, 3)
new_ntrc_msg++
/obj/item/device/pda/proc/setup_chatrooms() //this can't be done on New() because the messaging server needs to be instanced first
+1 -1
View File
@@ -190,7 +190,7 @@
name = "foam dart crossbow"
desc = "A weapon favored by many overactive children. Ages 8 and up."
icon = 'icons/obj/gun.dmi'
icon_state = "crossbow"
icon_state = "crossbow100"
item_state = "crossbow"
w_class = 2.0
attack_verb = list("attacked", "struck", "hit")
@@ -190,6 +190,37 @@ update_label("John Doe", "Clowny")
New()
access = get_all_centcom_access()
..()
/obj/item/weapon/card/id/ertsCommand
name = "\improper Centcom ID"
desc = "A ERT ID card"
icon_state = "centcom"
registered_name = "Emergency Response Team Commander"
assignment = "Emergency Response Team Commander"
access = list(access_sec_doors, access_engine, access_medical)
/obj/item/weapon/card/id/ertsSecurity
name = "\improper Centcom ID"
desc = "A ERT ID card"
icon_state = "centcom"
registered_name = "Security Response Officer"
assignment = "Security Response Officer"
access = list(access_sec_doors)
/obj/item/weapon/card/id/ertsEngineer
name = "\improper Centcom ID"
desc = "A ERT ID card"
icon_state = "centcom"
registered_name = "Engineer Response Officer"
assignment = "Engineer Response Officer"
access = list(access_engine)
/obj/item/weapon/card/id/ertsMedical
name = "\improper Centcom ID"
desc = "A ERT ID card"
icon_state = "centcom"
registered_name = "Medical Response Officer"
assignment = "Medical Response Officer"
access = list(access_medical)
/obj/item/weapon/card/id/prisoner
name = "prisoner ID card"
@@ -0,0 +1,264 @@
#define CHRONO_BEAM_RANGE 3
#define CHRONO_FRAME_COUNT 22
/obj/item/weapon/chrono_eraser
name = "Timestream Eradication Device"
desc = "The result of outlawed time-bluespace research, this device is capable of wiping a being from the timestream. They never are, they never were, they never will be."
icon = 'icons/obj/chronos.dmi'
icon_state = "chronobackpack"
item_state = "backpack"
w_class = 4.0
slot_flags = SLOT_BACK
slowdown = 1
action_button_name = "Equip/Unequip TED Gun"
var/obj/item/weapon/gun/energy/chrono_gun/PA = null
var/list/erased_minds = list() //a collection of minds from the dead
/obj/item/weapon/chrono_eraser/proc/pass_mind(var/datum/mind/M)
erased_minds += M
/obj/item/weapon/chrono_eraser/dropped()
if(PA)
qdel(PA)
/obj/item/weapon/chrono_eraser/Destroy()
dropped()
..()
/obj/item/weapon/chrono_eraser/ui_action_click()
var/mob/living/carbon/user = src.loc
if(iscarbon(user) && (user.back == src))
if(PA)
qdel(PA)
else
PA = new(src)
user.put_in_hands(PA)
/obj/item/weapon/gun/energy/chrono_gun
name = "T.E.D. Projection Apparatus"
desc = "It's as if they never existed in the first place."
icon = 'icons/obj/chronos.dmi'
icon_state = "chronogun"
item_state = "chronogun"
w_class = 3.0
flags = NODROP
ammo_type = list(/obj/item/ammo_casing/energy/chrono_beam)
fire_delay = 50
var/obj/item/weapon/chrono_eraser/TED = null
var/obj/effect/chrono_field/field = null
var/turf/startpos = null
/obj/item/weapon/gun/energy/chrono_gun/New(var/obj/item/weapon/chrono_eraser/T)
. = ..()
if(istype(T))
TED = T
else //admin must have spawned it
TED = new(src.loc)
qdel(src)
/obj/item/weapon/gun/energy/chrono_gun/dropped()
qdel(src)
/obj/item/weapon/gun/energy/chrono_gun/update_icon()
return
/obj/item/weapon/gun/energy/chrono_gun/process_fire()
if(field)
field_disconnect(field)
..()
/obj/item/weapon/gun/energy/chrono_gun/Destroy()
if(TED)
TED.PA = null
TED = null
if(field)
field_disconnect(field)
..()
/obj/item/weapon/gun/energy/chrono_gun/proc/field_connect(var/obj/effect/chrono_field/F)
var/mob/living/user = src.loc
if(F.gun)
if(isliving(user) && F.captured)
user << "<span class='alert'><b>FAIL: <i>[F.captured]</i> already has an existing connection.</b></span>"
src.field_disconnect(F)
else
startpos = get_turf(src)
field = F
F.gun = src
if(isliving(user) && F.captured)
user << "<span class='notice'>Connection established with target: <b>[F.captured]</b></span>"
/obj/item/weapon/gun/energy/chrono_gun/proc/field_disconnect(var/obj/effect/chrono_field/F)
if(F && field == F)
var/mob/living/user = src.loc
if(F.gun == src)
F.gun = null
if(isliving(user) && F.captured)
user << "<span class='alert'>Disconnected from target: <b>[F.captured]</b></span>"
field = null
startpos = null
/obj/item/weapon/gun/energy/chrono_gun/proc/field_check(var/obj/effect/chrono_field/F)
if(F)
if(field == F)
var/turf/currentpos = get_turf(src)
var/mob/living/user = src.loc
if((currentpos == startpos) && (field in view(CHRONO_BEAM_RANGE, currentpos)) && !user.lying && (user.stat == CONSCIOUS))
return 1
field_disconnect(F)
return 0
/obj/item/weapon/gun/energy/chrono_gun/proc/pass_mind(var/datum/mind/M)
if(TED)
TED.pass_mind(M)
/obj/item/projectile/energy/chrono_beam
name = "eradication beam"
icon_state = "chronobolt"
range = CHRONO_BEAM_RANGE
color = null
nodamage = 1
var/obj/item/weapon/gun/energy/chrono_gun/gun = null
/obj/item/projectile/energy/chrono_beam/fire()
gun = firer.get_active_hand()
if(istype(gun))
return ..()
else
return 0
/obj/item/projectile/energy/chrono_beam/on_hit(var/atom/target)
if(target && gun && isliving(target))
var/obj/effect/chrono_field/F = new(target.loc, target, gun)
gun.field_connect(F)
/obj/item/ammo_casing/energy/chrono_beam
name = "eradication beam"
projectile_type = /obj/item/projectile/energy/chrono_beam
icon_state = "chronobolt"
e_cost = 0
/obj/effect/chrono_field
name = "eradication field"
desc = "An aura of time-bluespace energy."
icon = 'icons/effects/effects.dmi'
icon_state = "chronofield"
density = 1
anchored = 1
unacidable = 1
blend_mode = BLEND_MULTIPLY
var/mob/living/captured = null
var/obj/item/weapon/gun/energy/chrono_gun/gun = null
var/tickstokill = 30
var/image/mob_underlay = null
var/preloaded = 0
var/RPpos = null
/obj/effect/chrono_field/New(loc, var/mob/living/target, var/obj/item/weapon/gun/energy/chrono_gun/G)
if(target && isliving(target) && G)
target.loc = src
src.captured = target
var/icon/mob_snapshot = getFlatIcon(target)
var/icon/cached_icon = new()
for(var/i=1, i<=CHRONO_FRAME_COUNT, i++)
var/icon/removing_frame = icon('icons/obj/chronos.dmi', "erasing", SOUTH, i)
var/icon/mob_icon = icon(mob_snapshot)
mob_icon.Blend(removing_frame, ICON_MULTIPLY)
cached_icon.Insert(mob_icon, "frame[i]")
mob_underlay = new(cached_icon, "frame1")
update_icon()
desc = initial(desc) + "<br><span class='info'>It appears to contain [target.name].</span>"
SSobj.processing.Add(src)
/obj/effect/chrono_field/Destroy()
if(gun && gun.field_check(src))
gun.field_disconnect(src)
..()
/obj/effect/chrono_field/update_icon()
var/ttk_frame = 1 - (tickstokill / initial(tickstokill))
ttk_frame = Clamp(Ceiling(ttk_frame * CHRONO_FRAME_COUNT), 1, CHRONO_FRAME_COUNT)
if(ttk_frame != RPpos)
RPpos = ttk_frame
mob_underlay.icon_state = "frame[RPpos]"
underlays = list() //hack: BYOND refuses to update the underlay to match the icon_state otherwise
underlays += mob_underlay
/obj/effect/chrono_field/process()
if(captured)
if(tickstokill > initial(tickstokill))
for(var/atom/movable/AM in contents)
AM.loc = loc
qdel(src)
else if(tickstokill <= 0)
captured << "<span class='boldnotice'>As the last essence of your being is erased from time, you begin to re-experience your most enjoyable memory. You feel happy...</span>"
var/mob/dead/observer/ghost = captured.ghostize(1)
if(captured.mind)
if(ghost)
ghost.mind = null
if(gun)
gun.pass_mind(captured.mind)
qdel(captured)
qdel(src)
else
captured.Paralyse(4)
if(captured.reagents)
captured.reagents.del_reagent("synaptizine") //you pesky thing you
if(captured.loc != src) //If they manage to escape, immediately kill them, this is so that even if there IS a way to get out, they won't use it
captured.loc = src
tickstokill = 0
return .()
update_icon()
if(gun)
if(gun.field_check(src))
tickstokill--
else
gun = null
return .()
else
tickstokill++
else
qdel(src)
/obj/effect/chrono_field/bullet_act(var/obj/item/projectile/P)
if(istype(P, /obj/item/projectile/energy/chrono_beam))
var/obj/item/projectile/energy/chrono_beam/beam = P
var/obj/item/weapon/gun/energy/chrono_gun/Pgun = beam.gun
if(Pgun && istype(Pgun))
Pgun.field_connect(src)
else
return 0
/obj/effect/chrono_field/assume_air()
return 0
/obj/effect/chrono_field/return_air() //we always have nominal air and temperature
var/datum/gas_mixture/GM = new
GM.oxygen = MOLES_O2STANDARD
GM.nitrogen = MOLES_N2STANDARD
GM.temperature = T20C
return GM
/obj/effect/chrono_field/Move()
return
/obj/effect/chrono_field/singularity_act()
return
/obj/effect/chrono_field/ex_act()
return
/obj/effect/chrono_field/blob_act()
return
#undef CHRONO_BEAM_RANGE
#undef CHRONO_FRAME_COUNT
@@ -36,6 +36,7 @@
message_admins("[key_name(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).")
user << "<span class='warning'>You prime the [name]! [det_time / 10] second\s!</span>"
playsound(user.loc, 'sound/weapons/armbomb.ogg', 60, 1)
active = 1
icon_state = initial(icon_state) + "_active"
if(iscarbon(user))
@@ -58,6 +58,7 @@
if(!active)
if(clown_check(user))
user << "<span class='warning'>You prime the [name]! [det_time/10] seconds!</span>"
playsound(user.loc, 'sound/weapons/armbomb.ogg', 60, 1)
active = 1
icon_state = initial(icon_state) + "_active"
add_fingerprint(user)
@@ -64,7 +64,18 @@
Implant Specifics:<BR>"}
return dat
/obj/item/weapon/implant/weapons_auth
name = "firearms authentication implant"
desc = "Lets you shoot your guns"
icon_state = "auth"
/obj/item/weapon/implant/tracking/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Firearms Authentication Implant<BR>
<b>Life:</b> 4 hours after death of host<BR>
<b>Implant Details:</b> <BR>
<b>Function:</b> Allows operation of implant-locked weaponry, preventing equipment from falling into enemy hands."}
return dat
/obj/item/weapon/implant/explosive
name = "explosive implant"
@@ -91,7 +102,7 @@
if(!cause || !imp_in) return 0
if(cause == "action_button" && alert(imp_in, "Are you sure you want to activate your explosive implant? This will cause you to explode and gib!", "Explosive Implant Confirmation", "Yes", "No") != "Yes")
return 0
explosion(src, -1, 0, 2, 3, 0) //This might be a bit much, dono will have to see.
explosion(src,0,1,5,7,10, flame_range = 5)
if(imp_in)
imp_in.gib()
+142 -12
View File
@@ -150,7 +150,7 @@
<body>
<H3>How to Clone People</H3>
So theres 50 dead people lying on the floor, chairs are spinning like no tomorrow and you havent the foggiest idea of what to do? Not to worry! This guide is intended to teach you how to clone people and how to do it right, in a simple step-by-step process! If at any point of the guide you have a mental meltdown, genetics probably isnt for you and you should get a job-change as soon as possible before youre sued for malpractice.
So theres 50 dead people lying on the floor, chairs are spinning like no tomorrow and you havent the foggiest idea of what to do? Not to worry! This guide is intended to teach you how to clone people and how to do it right, in a simple step-by-step process! If at any point of the guide you have a mental meltdown, genetics probably isnt for you and you should get a job-change as soon as possible before youre sued for malpractice.
<ol>
<li><a href='#1'>Acquire body</a></li>
@@ -170,36 +170,36 @@
This is pretty much vital for the process because without a body, you cannot clone it. Usually, bodies will be brought to you, so you do not need to worry so much about this step. If you already have a body, great! Move on to the next step.
<a name='2'><H4>Step 2: Strip body</H4>
The cloning machine does not like abiotic items. What this means is you cant clone anyone if theyre wearing clothes, so take all of it off. If its just one person, its courteous to put their possessions in the closet. If you have about seven people awaiting cloning, just leave the piles where they are, but dont mix them around and for Gods sake dont let the Clown in to steal them.
The cloning machine does not like abiotic items. What this means is you cant clone anyone if theyre wearing clothes, so take all of it off. If its just one person, its courteous to put their possessions in the closet. If you have about seven people awaiting cloning, just leave the piles where they are, but dont mix them around and for Gods sake dont let the Clown in to steal them.
<a name='3'><H4>Step 3: Put body in cloning machine</H4>
Grab the body and then put it inside the DNA modifier. If you cannot do this, then you messed up at Step 2. Go back and check you took EVERYTHING off - a commonly missed item is their headset.
<a name='4'><H4>Step 4: Scan body</H4>
Go onto the computer and scan the body by pressing Scan - <Subject Name Here>. If youre successful, they will be added to the records (note that this can be done at any time, even with living people, so that they can be cloned without a body in the event that they are lying dead on port solars and didnt turn on their suit sensors)! If not, and it says “Error: Mental interface failure.”, then they have left their bodily confines and are one with the spirits. If this happens, just shout at them to get back in their body, click Refresh and try scanning them again. If theres no success, threaten them with gibbing. Still no success? Skip over to Step 7 and dont continue after it, as you have an unresponsive body and it cannot be cloned. If you got “Error: Unable to locate valid genetic data.“, you are trying to clone a monkey - start over.
Go onto the computer and scan the body by pressing Scan - <Subject Name Here>. If youre successful, they will be added to the records (note that this can be done at any time, even with living people, so that they can be cloned without a body in the event that they are lying dead on port solars and didnt turn on their suit sensors)! If not, and it says “Error: Mental interface failure.”, then they have left their bodily confines and are one with the spirits. If this happens, just shout at them to get back in their body, click Refresh and try scanning them again. If theres no success, threaten them with gibbing. Still no success? Skip over to Step 7 and dont continue after it, as you have an unresponsive body and it cannot be cloned. If you got “Error: Unable to locate valid genetic data.“, you are trying to clone a monkey - start over.
<a name='5'><H4>Step 5: Clone body</H4>
Now that the body has a record, click View Records, click the subjects name, and then click Clone to start the cloning process. Congratulations! Youre halfway there. Remember not to Eject the cloning pod as this will kill the developing clone and youll have to start the process again.
Now that the body has a record, click View Records, click the subjects name, and then click Clone to start the cloning process. Congratulations! Youre halfway there. Remember not to Eject the cloning pod as this will kill the developing clone and youll have to start the process again.
<a name='6'><H4>Step 6: Get clean SEs for body</H4>
Cloning is a finicky and unreliable process. Whilst it will most certainly bring someone back from the dead, they can have any number of nasty disabilities given to them during the cloning process! For this reason, you need to prepare a clean, defect-free Structural Enzyme (SE) injection for when theyre done. If youre a competent Geneticist, you will already have one ready on your working computer. If, for any reason, you do not, then eject the body from the DNA modifier (NOT THE CLONING POD) and take it next door to the Genetics research room. Put the body in one of those DNA modifiers and then go onto the console. Go into View/Edit/Transfer Buffer, find an open slot and click “SE“ to save it. Then click Injector to get the SEs in syringe form. Put this in your pocket or something for when the body is done.
Cloning is a finicky and unreliable process. Whilst it will most certainly bring someone back from the dead, they can have any number of nasty disabilities given to them during the cloning process! For this reason, you need to prepare a clean, defect-free Structural Enzyme (SE) injection for when theyre done. If youre a competent Geneticist, you will already have one ready on your working computer. If, for any reason, you do not, then eject the body from the DNA modifier (NOT THE CLONING POD) and take it next door to the Genetics research room. Put the body in one of those DNA modifiers and then go onto the console. Go into View/Edit/Transfer Buffer, find an open slot and click “SE“ to save it. Then click Injector to get the SEs in syringe form. Put this in your pocket or something for when the body is done.
<a name='7'><H4>Step 7: Put body in morgue</H4>
Now that the cloning process has been initiated and you have some clean Structural Enzymes, you no longer need the body! Drag it to the morgue and tell the Chef over the radio that they have some fresh meat waiting for them in there. To put a body in a morgue bed, simply open the tray, grab the body, put it on the open tray, then close the tray again. Use one of the nearby pens to label the bed “CHEF MEAT” in order to avoid confusion.
Now that the cloning process has been initiated and you have some clean Structural Enzymes, you no longer need the body! Drag it to the morgue and tell the Chef over the radio that they have some fresh meat waiting for them in there. To put a body in a morgue bed, simply open the tray, grab the body, put it on the open tray, then close the tray again. Use one of the nearby pens to label the bed “CHEF MEAT” in order to avoid confusion.
<a name='8'><H4>Step 8: Await cloned body</H4>
Now go back to the lab and wait for your patient to be cloned. It wont be long now, I promise.
Now go back to the lab and wait for your patient to be cloned. It wont be long now, I promise.
<a name='9'><H4>Step 9: Use the clean SE injector on person</H4>
Has your body been cloned yet? Great! As soon as the guy pops out, grab your injector and jab it in them. Once youve injected them, they now have clean Structural Enzymes and their defects, if any, will disappear in a short while.
Has your body been cloned yet? Great! As soon as the guy pops out, grab your injector and jab it in them. Once youve injected them, they now have clean Structural Enzymes and their defects, if any, will disappear in a short while.
<a name='10'><H4>Step 10: Give person clothes back</H4>
Obviously the person will be naked after they have been cloned. Provided you werent an irresponsible little shit, you should have protected their possessions from thieves and should be able to give them back to the patient. No matter how cruel you are, its simply against protocol to force your patients to walk outside naked.
Obviously the person will be naked after they have been cloned. Provided you werent an irresponsible little shit, you should have protected their possessions from thieves and should be able to give them back to the patient. No matter how cruel you are, its simply against protocol to force your patients to walk outside naked.
<a name='11'><H4>Step 11: Send person on their way</H4>
Give the patient one last check-over - make sure they dont still have any defects and that they have all their possessions. Ask them how they died, if they know, so that you can report any foul play over the radio. Once youre done, your patient is ready to go back to work! Chances are they do not have Medbay access, so you should let them out of Genetics and the Medbay main entrance.
Give the patient one last check-over - make sure they dont still have any defects and that they have all their possessions. Ask them how they died, if they know, so that you can report any foul play over the radio. Once youre done, your patient is ready to go back to work! Chances are they do not have Medbay access, so you should let them out of Genetics and the Medbay main entrance.
<p>If youve gotten this far, congratulations! You have mastered the art of cloning. Now, the real problem is how to resurrect yourself after that traitor had his way with you for cloning his target.
<p>If youve gotten this far, congratulations! You have mastered the art of cloning. Now, the real problem is how to resurrect yourself after that traitor had his way with you for cloning his target.
@@ -283,6 +283,136 @@
Coming soon...
"}
/obj/item/weapon/book/manual/experimentor
name = "Mentoring your Experiments"
icon_state = "rdbook"
author = "Dr. H.P. Kritz"
dat = {"<html>
<head>
<style>
h1 {font-size: 18px; margin: 15px 0px 5px;}
h2 {font-size: 15px; margin: 15px 0px 5px;}
li {margin: 2px 0px 2px 15px;}
ul {list-style: none; margin: 5px; padding: 0px;}
ol {margin: 5px; padding: 0px 15px;}
</style>
</head>
<body>
<h1>THE E.X.P.E.R.I-MENTOR</h1>
The Enhanced Xenobiological Period Extraction (and) Restoration Instructor is a machine designed to discover the secrets behind every item in existence.
With advanced technology, it can process 99.95% of items, and discover their uses and secrets.
The E.X.P.E.R.I-MENTOR is a Research apparatus that takes items, and through a process of elimination, it allows you to deduce new technological designs from them.
Due to the volatile nature of the E.X.P.E.R.I-MENTOR, there is a slight chance for malfunction, potentially causing irreparable damage to you or your environment.
However, upgrading the apparatus has proven to decrease the chances of undesirable, potentially life-threatening outcomes.
Please note that the E.X.P.E.R.I-MENTOR uses a state-of-the-art random generator, which has a larger entropy than the observable universe,
therefore it can generate wildly different results each day, therefore it is highly suggested to re-scan objects of interests frequently (e.g. each shift).
<h2>BASIC PROCESS</h2>
The usage of the E.X.P.E.R.I-MENTOR is quite simple:
<ol>
<li>Find an item with a technological background</li>
<li>Insert the item into the E.X.P.E.R.I-MENTOR</li>
<li>Cycle through each processing method of the device.</li>
<li>Stand back, even in case of a successful experiment, as the machine might produce undesired behaviour.</li>
</ol>
<h2>ADVANCED USAGE</h2>
The E.X.P.E.R.I-MENTOR has a variety of uses, beyond menial research work. The different results can be used to combat localised events, or even to get special items.
The E.X.P.E.R.I-MENTOR's OBLITERATE function has the added use of transferring the destroyed item's material into a linked lathe.
The IRRADIATE function can be used to transform items into other items, resulting in potential upgrades (or downgrades).
Users should remember to always wear appropriate protection when using the machine, because malfunction can occur at any moment!
<h1>EVENTS</h1>
<h2>GLOBAL (happens at any time):</h2>
<ol>
<li>DETECTION MALFUNCTION - The machine's onboard sensors have malfunctioned, causing it to redefine the item's experiment type.
Produces the message: The E.X.P.E.R.I-MENTOR's onboard detection system has malfunctioned!</li>
<li>IANIZATION - The machine's onboard corgi-filter has malfunctioned, causing it to produce a corgi from.. somewhere.
Produces the message: The E.X.P.E.R.I-MENTOR melts the banana, ian-izing the air around it!</li>
<li>RUNTIME ERROR - The machine's onboard C4T-P processor has encountered a critical error, causing it to produce a cat from.. somewhere.
Produces the message: The E.X.P.E.R.I-MENTOR encounters a run-time error!</li>
<li>B100DG0D.EXE - The machine has encountered an unknown subroutine, which has been injected into it's runtime. It upgrades the held item!
Produces the message: The E.X.P.E.R.I-MENTOR improves the banana, drawing the life essence of those nearby!</li>
<li>POWERSINK - The machine's PSU has tripped the charging mechanism! It consumes massive amounts of power!
Produces the message: The E.X.P.E.R.I-MENTOR begins to smoke and hiss, shaking violently!</li>
</ol>
<h2>FAIL:</h2>
This event is produced when the item mismatches the selected experiment.
Produces a random message similar to: "the Banana rumbles, and shakes, the experiment was a failure!"
<h2>POKE:</h2>
<ol>
<li>WILD ARMS - The machine's gryoscopic processors malfunction, causing it to lash out at nearby people with it's arms.
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions and destroys the banana, lashing it's arms out at nearby people!</li>
<li>MISTYPE - The machine's interface has been garbled, and it switches to OBLITERATE.
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions!</li>
<li>THROW - The machine's spatial recognition device has shifted several meters across the room, causing it to try and repostion the item there.
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, throwing the banana!</li>
</ol>
<h2>IRRADIATE:</h2>
<ol>
<li>RADIATION LEAK - The machine's shield has failed, resulting in a toxic radiation leak.
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, melting the banana and leaking radiation!</li>
<li>RADIATION DUMP - The machine's recycling and containment functions have failed, resulting in a dump of toxic waste around it
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, spewing toxic waste!</li>
<li>MUTATION - The machine's radio-isotope level meter has malfunctioned, causing it over-irradiate the item, making it transform.
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, transforming the banana!</li>
</ol>
<h2>GAS:</h2>
<ol>
<li>TOXIN LEAK - The machine's filtering and vent systems have failed, resulting in a cloud of toxic gas being expelled.
Produces the message: The E.X.P.E.R.I-MENTOR destroys the banana, leaking dangerous gas!</li>
<li>GAS LEAK - The machine's vent systems have failed, resulting in a cloud of harmless, but obscuring gas.
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, spewing harmless gas!</li>
<li>ELECTROMAGNETIC IONS - The machine's electrolytic scanners have failed, causing a dangerous Electromagnetic reaction.
Produces the message: The E.X.P.E.R.I-MENTOR melts the banana, ionizing the air around it!</li>
</ol>
<h2>HEAT:</h2>
<ol>
<li>TOASTER - The machine's heating coils have come into contact with the machine's gas storage, causing a large, sudden blast of flame.
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, melting the banana and releasing a burst of flame!</li>
<li>SAUNA - The machine's vent loop has sprung a leak, resulting in a large amount of superheated air being dumped around it.
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, melting the banana and leaking hot air!</li>
<li>EMERGENCY VENT - The machine's temperature gauge has malfunctioned, resulting in it attempting to cool the area around it, but instead, dumping a cloud of steam.
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, activating it's emergency coolant systems!</li>
</ol>
<h2>COLD:</h2>
<ol>
<li>FREEZER - The machine's cooling loop has sprung a leak, resulting in a cloud of super-cooled liquid being blasted into the air.
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, shattering the banana and releasing a dangerous cloud of coolant!</li>
<li>FRIDGE - The machine's cooling loop has been exposed to the outside air, resulting in a large decrease in temperature.
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, shattering the banana and leaking cold air!</li>
<li>SNOWSTORM - The machine's cooling loop has come into contact with the heating coils, resulting in a sudden blast of cool air.
Produces the message: The E.X.P.E.R.I-MENTOR malfunctions, releasing a flurry of chilly air as the banana pops out!</li>
</ol>
<h2>OBLITERATE:</h2>
<ol>
<li>IMPLOSION - The machine's pressure leveller has malfunctioned, causing it to pierce the space-time momentarily, making everything in the area fly towards it.
Produces the message: The E.X.P.E.R.I-MENTOR's crusher goes way too many levels too high, crushing right through space-time!</li>
<li>DISTORTION - The machine's pressure leveller has completely disabled, resulting in a momentary space-time distortion, causing everything to fly around.
Produces the message: The E.X.P.E.R.I-MENTOR's crusher goes one level too high, crushing right into space-time!</li>
</ol>
</body>
</html>
"}
/obj/item/weapon/book/manual/research_and_development
name = "Research and Development 101"
@@ -787,4 +917,4 @@
icon_state ="bookHacking"
author = "Engineering Encyclopedia"
title = "Hacking"
page_link = "Hacking"
page_link = "Hacking"
@@ -96,7 +96,7 @@
/obj/item/weapon/melee/classic_baton/telescopic
)
/obj/item/weapon/storage/belt/security/New()
/obj/item/weapon/storage/belt/security/full/New()
..()
new /obj/item/device/flashlight/seclite(src)
@@ -433,6 +433,21 @@
new /obj/item/weapon/cartridge/security(src)
new /obj/item/weapon/cartridge/security(src)
/obj/item/weapon/storage/box/firingpins
name = "box of standard firing pins"
desc = "A box full of standard firing pins, to allow newly-developed firearms to operate."
icon_state = "id"
/obj/item/weapon/storage/box/firingpins/New()
..()
new /obj/item/device/firing_pin(src)
new /obj/item/device/firing_pin(src)
new /obj/item/device/firing_pin(src)
new /obj/item/device/firing_pin(src)
new /obj/item/device/firing_pin(src)
new /obj/item/device/firing_pin(src)
new /obj/item/device/firing_pin(src)
/obj/item/weapon/storage/box/handcuffs
name = "box of spare handcuffs"
desc = "A box full of handcuffs."
@@ -276,7 +276,7 @@
add_fingerprint(usr)
if(!prevent_warning && !istype(W, /obj/item/weapon/gun/projectile/automatic/crossbow))
if(!prevent_warning && !istype(W, /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow))
for(var/mob/M in viewers(usr, null))
if(M == usr)
usr << "<span class='notice'>You put [W] [preposition]to [src].</span>"
@@ -13,7 +13,7 @@
return
if("stealth")
new /obj/item/weapon/gun/projectile/automatic/crossbow(src)
new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow(src)
new /obj/item/weapon/pen/sleepy(src)
new /obj/item/device/chameleon(src)
return
@@ -103,21 +103,21 @@
/*/obj/item/weapon/storage/box/syndie_kit/imp_compress
name = "Compressed Matter Implant (with injector)"
/obj/item/weapon/storage/syndie_kit/imp_compress/New()
/obj/item/weapon/storage/box/syndie_kit/imp_compress/New()
new /obj/item/weapon/implanter/compressed(src)
..()
return
*/
/obj/item/weapon/storage/syndie_kit/imp_explosive
/obj/item/weapon/storage/box/syndie_kit/imp_explosive
name = "Explosive Implant (with injector)"
/obj/item/weapon/storage/syndie_kit/imp_explosive/New()
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src)
/obj/item/weapon/storage/box/syndie_kit/imp_explosive/New()
var/obj/item/weapon/implanter/O = new(src)
O.imp = new /obj/item/weapon/implant/explosive(O)
O.name = "(BIO-HAZARD) BIO-detpack"
O.update_icon()
..()
return*/
return
/obj/item/weapon/storage/box/syndie_kit/imp_uplink
name = "boxed uplink implant (with injector)"
@@ -152,6 +152,7 @@
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
return
/obj/item/weapon/storage/box/syndie_kit/emp
name = "boxed EMP kit"
@@ -83,7 +83,7 @@
new /obj/item/weapon/shield/riot/tele(src)
new /obj/item/weapon/melee/baton/loaded(src)
new /obj/item/weapon/gun/energy/gun/advtaser(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/weapon/storage/belt/security/full(src)
new /obj/item/clothing/suit/toggle/wintercoat/security(src)
return
@@ -113,7 +113,7 @@
new /obj/item/weapon/reagent_containers/spray/pepper(src)
new /obj/item/weapon/melee/baton/loaded(src)
new /obj/item/weapon/gun/energy/gun/advtaser(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/weapon/storage/belt/security/full(src)
new /obj/item/clothing/suit/toggle/wintercoat/security(src)
return
@@ -137,7 +137,7 @@
new /obj/item/weapon/reagent_containers/spray/pepper(src)
new /obj/item/device/flash/handheld(src)
new /obj/item/weapon/grenade/flashbang(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/weapon/storage/belt/security/full(src)
new /obj/item/clothing/glasses/hud/security/sunglasses(src)
new /obj/item/clothing/suit/toggle/wintercoat/security(src)
return
@@ -5,6 +5,36 @@
icon_closed = "syndicate"
icon_opened = "syndicateopen"
/obj/structure/closet/syndicate/ertCom/New()
name = "commanders closet"
desc = "Emergency Response Team equipment locker"
new /obj/item/weapon/card/id/ertsCommand(src)
new /obj/item/weapon/storage/backpack/security(src)
return
/obj/structure/closet/syndicate/ertSec/New()
name = "security closet"
desc = "Emergency Response Team equipment locker"
new /obj/item/weapon/gun/energy/pulse_rifle/pulse_pistol(src)
new /obj/item/weapon/card/id/ertsSecurity(src)
new /obj/item/weapon/storage/backpack/security(src)
return
/obj/structure/closet/syndicate/ertMed/New()
name = "medical closet"
desc = "Emergency Response Team equipment locker"
new /obj/item/weapon/gun/energy/pulse_rifle/pulse_pistol(src)
new /obj/item/weapon/card/id/ertsMedical(src)
new /obj/item/weapon/storage/backpack/medic(src)
return
/obj/structure/closet/syndicate/ertEngi/New()
name = "engineer closet"
desc = "Emergency Response Team equipment locker"
new /obj/item/weapon/gun/energy/pulse_rifle/pulse_pistol(src)
new /obj/item/weapon/card/id/ertsEngineer(src)
new /obj/item/weapon/storage/backpack/industrial(src)
return
/obj/structure/closet/syndicate/personal
desc = "It's a personal storage unit for operative gear."
+1
View File
@@ -112,6 +112,7 @@
update_nearby_icons()
/obj/structure/window/attack_tk(mob/user as mob)
user.changeNext_move(CLICK_CD_MELEE)
user.visible_message("<span class='notice'>Something knocks on [src].</span>")
add_fingerprint(user)
playsound(loc, 'sound/effects/Glassknock.ogg', 50, 1)