mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Merge remote-tracking branch 'upstream/dev' into bs12-zuhweapons
This commit is contained in:
@@ -32,6 +32,7 @@
|
||||
var/obj/item/butt = new cig.type_butt(src)
|
||||
cig.transfer_fingerprints_to(butt)
|
||||
del(cig)
|
||||
W = butt
|
||||
else if (cig.lit == 0)
|
||||
user << "You place [cig] in [src] without even smoking it. Why would you do that?"
|
||||
|
||||
|
||||
@@ -531,10 +531,17 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
. += "*no key*"
|
||||
|
||||
if(include_name && M)
|
||||
var/name
|
||||
|
||||
if(M.real_name)
|
||||
. += "/([M.real_name])"
|
||||
name = M.real_name
|
||||
else if(M.name)
|
||||
. += "/([M.name])"
|
||||
name = M.name
|
||||
|
||||
if(is_special_character(M))
|
||||
. += "/(<font color='#FFA500'>[name]</font>)" //Orange
|
||||
else
|
||||
. += "/([name])"
|
||||
|
||||
return .
|
||||
|
||||
|
||||
@@ -100,8 +100,10 @@
|
||||
/atom/proc/emp_act(var/severity)
|
||||
return
|
||||
|
||||
/atom/proc/bullet_act(var/obj/item/projectile/Proj)
|
||||
return 0
|
||||
|
||||
/atom/proc/bullet_act(obj/item/projectile/P, def_zone)
|
||||
P.on_hit(src, 0, def_zone)
|
||||
. = 0
|
||||
|
||||
/atom/proc/in_contents_of(container)//can take class or object instance as argument
|
||||
if(ispath(container))
|
||||
|
||||
@@ -136,9 +136,9 @@
|
||||
PT.master = V
|
||||
OT.master = V
|
||||
|
||||
PT.air_contents.temperature = PHORON_FLASHPOINT
|
||||
PT.air_contents.phoron = 3
|
||||
PT.air_contents.carbon_dioxide = 17
|
||||
PT.air_contents.temperature = PLASMA_FLASHPOINT
|
||||
PT.air_contents.toxins = 12
|
||||
PT.air_contents.carbon_dioxide = 8
|
||||
|
||||
PT.air_contents.update_values()
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
|
||||
|
||||
<h2>O2-Reaction Mode</h2>
|
||||
|
||||
|
||||
The second mode for running the engine uses a gas mixture to produce a reaction within the supermatter. This mode requires the CE's or Atmospheric's help to set up. This is called 'O2-Reaction Mode.'</br></br>
|
||||
|
||||
<b><u>THIS MODE CAN CAUSE A RUNAWAY REACTION, LEADING TO CATASTROPHIC FAILURE IF NOT MAINTAINED. NEVER FORGET ABOUT THE ENGINE IN THIS MODE.</u></b></br></br>
|
||||
@@ -225,7 +225,7 @@
|
||||
<h2>Power outage</h2>
|
||||
|
||||
A power problem has made the entire station lose power? Could be station-wide wiring problems or syndicate power sinks. In any case follow these steps:
|
||||
|
||||
|
||||
<ol>
|
||||
<li><b><font color='red'>PANIC!</font></b></li>
|
||||
<li>Get your ass over to engineering! <b>QUICKLY!!!</b></li>
|
||||
@@ -284,7 +284,7 @@
|
||||
</ol>
|
||||
<p>
|
||||
Note that for a successful harvest, the body from which the blood was taken from must be dead BEFORE harvesting the pod, however the pod can be growing while they are still alive. Otherwise, the soul would not be able to migrate to the new Diona body.<br><br>
|
||||
|
||||
|
||||
It really is that easy! Good luck!
|
||||
|
||||
</body>
|
||||
@@ -447,7 +447,7 @@
|
||||
<li>Secure the external reinforced armor plating with a wrench.</li>
|
||||
<li>Weld the external reinforced armor plating to the chassis.</li>
|
||||
</ol>
|
||||
|
||||
|
||||
<h2>Additional Information:</h2>
|
||||
<ul>
|
||||
<li>The firefighting variation is made in a similar fashion.</li>
|
||||
@@ -499,7 +499,7 @@
|
||||
In addition to this important purpose, the R&D console has a disk menu that lets you transfer data from the database onto disk or from the disk into the database.
|
||||
It also has a settings menu that lets you re-sync with nearby R&D devices (if they've become disconnected), lock the console from the unworthy,
|
||||
upload the data to all other R&D consoles in the network (all R&D consoles are networked by default), connect/disconnect from the network, and purge all data from the database.<br><br>
|
||||
|
||||
|
||||
<b>NOTE:</b> The technology list screen, circuit imprinter, and protolathe menus are accessible by non-scientists. This is intended to allow 'public' systems for the plebians to utilize some new devices.
|
||||
|
||||
<h2>Destructive Analyzer</h2>
|
||||
@@ -687,7 +687,7 @@
|
||||
|
||||
<h2><a name="Repairs">Cyborg Repairs</h2>
|
||||
Occasionally a Cyborg may become damaged. This could be in the form of impact damage from a heavy or fast-travelling object, or it could be heat damage from high temperatures, or even lasers or Electromagnetic Pulses (EMPs).
|
||||
|
||||
|
||||
<h3>Dents</h3>
|
||||
If a cyborg becomes damaged due to impact from heavy or fast-moving objects, it will become dented. Sure, a dent may not seem like much, but it can compromise the structural integrity of the cyborg, possibly causing a critical failure.
|
||||
Dents in a cyborg's frame are rather easy to repair, all you need is to apply a welding tool to the dented area, and the high-tech cyborg frame will repair the dent under the heat of the welder.
|
||||
@@ -779,9 +779,9 @@
|
||||
<body>
|
||||
<br>
|
||||
<h1>The Oath</h1>
|
||||
|
||||
|
||||
<i>The Medical Oath sworn by recognised medical practitioners in the employ of NanoTrasen</i><br>
|
||||
|
||||
|
||||
<ol>
|
||||
<li>Now, as a new doctor, I solemnly promise that I will, to the best of my ability, serve humanity-caring for the sick, promoting good health, and alleviating pain and suffering.</li>
|
||||
<li>I recognise that the practice of medicine is a privilege with which comes considerable responsibility and I will not abuse my position.</li>
|
||||
@@ -922,7 +922,7 @@
|
||||
|
||||
<h3>Irish Cream:</h3>
|
||||
Mix cream and whiskey into a glass.
|
||||
|
||||
|
||||
<h3>The Manly Dorf:</h3>
|
||||
Mix ale and beer into a glass.
|
||||
|
||||
@@ -1000,9 +1000,9 @@
|
||||
<body>
|
||||
<h1>Nuclear Explosives 101</h1>
|
||||
Hello and thank you for choosing the Syndicate for your nuclear information needs. Today's crash course will deal with the operation of a Fusion Class NanoTrasen made Nuclear Device.<br><br>
|
||||
|
||||
|
||||
First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done, to unbolt it, one must completely log in, which at this time may not be possible.<br>
|
||||
|
||||
|
||||
<h2>To make the nuclear device functional</h2>
|
||||
<ul>
|
||||
<li>Place the nuclear device in the designated detonation zone.</li>
|
||||
@@ -1012,20 +1012,20 @@
|
||||
<b>Note</b>: If you make a mistake, press R to reset the device.
|
||||
<li>Press the E button to log on to the device.</li>
|
||||
</ul><br>
|
||||
|
||||
|
||||
You now have activated the device. To deactivate the buttons at anytime, for example when you've already prepped the bomb for detonation, remove the authentication disk OR press R on the keypad.<br><br>
|
||||
Now the bomb CAN ONLY be detonated using the timer. Manual detonation is not an option. Toggle off the SAFETY.<br>
|
||||
<b>Note</b>: You wouldn't believe how many Syndicate Operatives with doctorates have forgotten this step.<br><br>
|
||||
|
||||
So use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.<br>
|
||||
|
||||
So use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.<br>
|
||||
<b>Note</b>: THE BOMB IS STILL SET AND WILL DETONATE<br><br>
|
||||
|
||||
|
||||
Now before you remove the disk, if you need to move the bomb, you can toggle off the anchor, move it, and re-anchor.<br><br>
|
||||
|
||||
|
||||
Remember the order:<br>
|
||||
<b>Disk, Code, Safety, Timer, Disk, RUN!</b><br><br>
|
||||
Intelligence Analysts believe that normal NanoTrasen procedure is for the Captain to secure the nuclear authentication disk.<br><br>
|
||||
|
||||
|
||||
Good luck!
|
||||
</body>
|
||||
</html>
|
||||
@@ -1048,7 +1048,7 @@
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<h1><a name="Contents">Contents</a></h1>
|
||||
<ol>
|
||||
<li><a href="#Foreword">Author's Foreword</a></li>
|
||||
@@ -1077,7 +1077,6 @@
|
||||
<ul>
|
||||
<li><b>Straight pipes:</b> They're pipes. One-meter sections. Straight line. Pretty simple. Just about every pipe and device is based around this
|
||||
standard one-meter size, so most things will take up as much space as one of these.</li>
|
||||
<<<<<<< HEAD
|
||||
<li><b>Bent pipes:</b> Pipes with a 90 degree bend at the half-meter mark. My goodness.</li>
|
||||
<li><b>Pipe manifolds:</b> Pipes that are essentially a "T" shape, allowing you to connect three things at one point.</li>
|
||||
<li><b>4-way manifold:</b> A four-way junction.</li>
|
||||
@@ -1085,9 +1084,8 @@
|
||||
<li><b>Manual valve:</b> A valve that will block off airflow when turned. Can't be used by the AI or cyborgs, because they don't have hands.</li>
|
||||
<li><b>Manual T-valve:</b> Like a manual valve, but at the center of a manifold instead of a straight pipe.</li><BR><BR>
|
||||
</ul>
|
||||
|
||||
|
||||
<h1><a name="Insulated"><B>Insulated Pipes</B></a></h1>
|
||||
=======
|
||||
<li><I>Bent pipes:</I> Pipes with a 90 degree bend at the half-meter mark. My goodness.</li>
|
||||
<li><I>Pipe manifolds:</I> Pipes that are essentially a "T" shape, allowing you to connect three things at one point.</li>
|
||||
<li><I>4-way manifold:</I> A four-way junction.</li>
|
||||
@@ -1096,7 +1094,6 @@
|
||||
<li><I>Manual T-Valve:</I> Like a manual valve, but at the center of a manifold instead of a straight pipe.</li><BR><BR>
|
||||
|
||||
<h1><a name="Insulated"><B>Insulated Pipes</B></a></h1><BR>
|
||||
>>>>>>> 4b04be7536168ccf4a73c91dcaa4681e4db18a4e
|
||||
<I>Special Public Service Announcement.</I><BR>
|
||||
Our regular pipes are already insulated. These are completely worthless. Punch anyone who uses them.<BR><BR>
|
||||
|
||||
@@ -1105,12 +1102,8 @@
|
||||
This is usually where people get frightened, afraid, and start calling on their gods and/or cowering in fear. Yes, I can see you doing that right now.
|
||||
Stop it. It's unbecoming. Most of these are fairly straightforward.<BR>
|
||||
|
||||
<<<<<<< HEAD
|
||||
<ul>
|
||||
<li><b>Gas pump:</b> Take a wild guess. It moves gas in the direction it's pointing (marked by the red line on one end). It moves it based on pressure, the maximum output being 4500 kPa (kilopascals).
|
||||
=======
|
||||
<li><I>Gas pump:</I> Take a wild guess. It moves gas in the direction it's pointing (marked by the red line on one end). It moves it based on pressure, the maximum output being 4500 kPa (kilopascals).
|
||||
>>>>>>> 4b04be7536168ccf4a73c91dcaa4681e4db18a4e
|
||||
Ordinary atmospheric pressure, for comparison, is 101.3 kPa, and the minimum pressure of room-temperature pure oxygen needed to not suffocate in a matter of minutes is 16 kPa
|
||||
(though 18 kPa is preferred using internals, for various reasons).</li>
|
||||
<li><b>Volume pump:</b> This pump goes based on volume, instead of pressure, and the possible maximum pressure it can create in the pipe on the receiving end is double the gas pump because of this,
|
||||
@@ -1127,28 +1120,17 @@
|
||||
<li><b>Gas filter:</b> Essentially the opposite of a gas mixer. One side is input. The other two sides are output. One gas type will be filtered into the perpendicular output pipe,
|
||||
the rest will continue out the other side. Can also output from 0-4500 kPa.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h1><a name="HES"><B>Heat Exchange Systems</B></a></h1>
|
||||
<I>Will not set you on fire.</I><BR>
|
||||
These systems are used to only transfer heat between two pipes. They will not move gases or any other element, but will equalize the temperature (eventually). Note that because of how gases work (remember: pv=nRt),
|
||||
a higher temperature will raise pressure, and a lower one will lower temperature.<BR>
|
||||
|
||||
<<<<<<< HEAD
|
||||
<ul>
|
||||
<li><b>Pipe:</b> This is a pipe that will exchange heat with the surrounding atmosphere. Place in fire for superheating. Place in space for supercooling.</li>
|
||||
<li><b>Bent pipe:</b> Take a wild guess.</li>
|
||||
<li><b>Junction:</b> The point where you connect your normal pipes to heat exchange pipes. Not necessary for heat exchangers, but necessary for H/E pipes/bent pipes.</li>
|
||||
<li><b>Heat exchanger:</b> These funky-looking bits attach to an open pipe end. Put another heat exchanger directly across from it, and you can transfer heat across two pipes without having to have the gases touch.
|
||||
This normally shouldn't exchange with the ambient air, despite being totally exposed. Just don't ask questions...</li>
|
||||
</ul><BR>
|
||||
=======
|
||||
<li><I>Pipe:</I> This is a pipe that will exchange heat with the surrounding atmosphere. Place in fire for superheating. Place in space for supercooling.</li>
|
||||
<li><I>Bent pipe:</I> Take a wild guess.</li>
|
||||
<li><I>Junction:</I> The point where you connect your normal pipes to heat exchange pipes. Not necessary for heat exchangers, but necessary for H/E pipes/bent pipes.</li>
|
||||
<li><I>Heat exchanger:</I> These funky-looking bits attach to an open pipe end. Put another heat exchanger directly across from it, and you can transfer heat across two pipes without having to have the gases touch.
|
||||
This normally shouldn't exchange with the ambient air, despite being totally exposed. Just don't ask questions...</li><BR>
|
||||
>>>>>>> 4b04be7536168ccf4a73c91dcaa4681e4db18a4e
|
||||
|
||||
|
||||
That's about it for pipes. Go forth, armed with this knowledge, and try not to break, burn down, or kill anything. Please.
|
||||
|
||||
@@ -1173,10 +1155,10 @@
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<h1><a name="Foreword">EVA Gear and You: Not Spending All Day Inside</a></h1>
|
||||
<I>Or: How not to suffocate because there's a hole in your shoes</I><BR>
|
||||
|
||||
|
||||
<h2><a name="Contents">Contents</a></h2>
|
||||
<ol>
|
||||
<li><a href="#Foreword">A foreword on using EVA gear</a></li>
|
||||
|
||||
@@ -93,7 +93,13 @@
|
||||
return !density
|
||||
|
||||
/obj/structure/grille/bullet_act(var/obj/item/projectile/Proj)
|
||||
|
||||
if(!Proj) return
|
||||
|
||||
//Tasers and the like should not damage grilles.
|
||||
if(Proj.damage_type == HALLOSS)
|
||||
return
|
||||
|
||||
src.health -= Proj.damage*0.2
|
||||
healthcheck()
|
||||
return 0
|
||||
|
||||
@@ -18,6 +18,11 @@
|
||||
|
||||
|
||||
/obj/structure/window/bullet_act(var/obj/item/projectile/Proj)
|
||||
|
||||
//Tasers and the like should not damage windows.
|
||||
if(Proj.damage_type == HALLOSS)
|
||||
return
|
||||
|
||||
health -= Proj.damage
|
||||
..()
|
||||
if(health <= 0)
|
||||
|
||||
@@ -11,6 +11,7 @@ var/list/admin_verbs_default = list(
|
||||
// /client/proc/deadchat /*toggles deadchat on/off*/
|
||||
)
|
||||
var/list/admin_verbs_admin = list(
|
||||
/datum/admins/proc/show_player_panel,
|
||||
/client/proc/player_panel, /*shows an interface for all players, with links to various panels (old style)*/
|
||||
/client/proc/player_panel_new, /*shows an interface for all players, with links to various panels*/
|
||||
/client/proc/invisimin, /*allows our mob to go invisible/visible*/
|
||||
@@ -244,6 +245,7 @@ var/list/admin_verbs_mod = list(
|
||||
/client/proc/player_panel_new,
|
||||
/client/proc/dsay,
|
||||
/datum/admins/proc/show_skills,
|
||||
/datum/admins/proc/show_player_panel,
|
||||
/client/proc/jobbans,
|
||||
/client/proc/cmd_admin_subtle_message /*send an message to somebody as a 'voice in their head'*/
|
||||
)
|
||||
|
||||
@@ -197,7 +197,7 @@ BLIND // can't see anything
|
||||
name = "Space helmet"
|
||||
icon_state = "space"
|
||||
desc = "A special helmet designed for work in a hazardous, low-pressure environment."
|
||||
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE
|
||||
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
|
||||
item_state = "space"
|
||||
permeability_coefficient = 0.01
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
|
||||
@@ -215,7 +215,7 @@ BLIND // can't see anything
|
||||
w_class = 4//bulky item
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.02
|
||||
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
|
||||
flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | THICKMATERIAL
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen)
|
||||
slowdown = 3
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "helmet"
|
||||
desc = "Standard Security gear. Protects the head from impacts."
|
||||
icon_state = "helmet"
|
||||
flags = FPRINT | TABLEPASS | HEADCOVERSEYES
|
||||
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | THICKMATERIAL
|
||||
item_state = "helmet"
|
||||
armor = list(melee = 50, bullet = 15, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
flags_inv = HIDEEARS|HIDEEYES
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/obj/item/clothing/suit/armor
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
flags = FPRINT | TABLEPASS
|
||||
flags = FPRINT | TABLEPASS | THICKMATERIAL
|
||||
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO
|
||||
min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
|
||||
@@ -13,7 +13,7 @@ var/list/artifact_spawn = list() // Runtime fix for geometry loading before cont
|
||||
opacity = 1
|
||||
density = 1
|
||||
blocks_air = 1
|
||||
temperature = TCMB
|
||||
temperature = T0C
|
||||
var/mineral/mineral
|
||||
var/mined_ore = 0
|
||||
var/last_act = 0
|
||||
@@ -389,7 +389,7 @@ var/list/artifact_spawn = list() // Runtime fix for geometry loading before cont
|
||||
icon_state = "asteroid"
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
temperature = TCMB
|
||||
temperature = T0C
|
||||
icon_plating = "asteroid"
|
||||
var/dug = 0 //0 = has not yet been dug, 1 = has already been dug
|
||||
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
|
||||
/obj/structure/ore_box/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/ore))
|
||||
src.contents += W;
|
||||
user.u_equip(W)
|
||||
src.contents += W
|
||||
if (istype(W, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = W
|
||||
S.hide_from(usr)
|
||||
|
||||
@@ -48,6 +48,12 @@
|
||||
|
||||
|
||||
/mob/proc/death(gibbed)
|
||||
|
||||
//Quick fix for corpses kept propped up in chairs. ~Z
|
||||
drop_r_hand()
|
||||
drop_l_hand()
|
||||
//End of fix.
|
||||
|
||||
timeofdeath = world.time
|
||||
|
||||
living_mob_list -= src
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
if(language)
|
||||
verb = language.speech_verb
|
||||
style = language.colour
|
||||
|
||||
|
||||
var/speaker_name = speaker.name
|
||||
if(istype(speaker, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = speaker
|
||||
@@ -71,7 +71,7 @@
|
||||
verb = language.speech_verb
|
||||
style = language.colour
|
||||
|
||||
|
||||
|
||||
|
||||
if(hard_to_hear)
|
||||
message = stars(message)
|
||||
@@ -89,11 +89,28 @@
|
||||
if(hard_to_hear)
|
||||
speaker_name = "unknown"
|
||||
|
||||
var/changed_voice
|
||||
|
||||
if(istype(src, /mob/living/silicon/ai) && !hard_to_hear)
|
||||
var/jobname // the mob's "job"
|
||||
var/mob/living/carbon/human/impersonating //The crewmember being impersonated, if any.
|
||||
|
||||
if (ishuman(speaker))
|
||||
var/mob/living/carbon/human/H = speaker
|
||||
jobname = H.get_assignment()
|
||||
|
||||
if((H.wear_id && istype(H.wear_id,/obj/item/weapon/card/id/syndicate)) && (H.wear_mask && istype(H.wear_mask,/obj/item/clothing/mask/gas/voice)))
|
||||
|
||||
changed_voice = 1
|
||||
var/mob/living/carbon/human/I = locate(speaker_name)
|
||||
|
||||
if(I)
|
||||
impersonating = I
|
||||
jobname = impersonating.get_assignment()
|
||||
else
|
||||
jobname = "Unknown"
|
||||
else
|
||||
jobname = H.get_assignment()
|
||||
|
||||
else if (iscarbon(speaker)) // Nonhuman carbon mob
|
||||
jobname = "No id"
|
||||
else if (isAI(speaker))
|
||||
@@ -105,7 +122,13 @@
|
||||
else
|
||||
jobname = "Unknown"
|
||||
|
||||
track = "<a href='byond://?src=\ref[src];track=\ref[speaker]'>[speaker_name] ([jobname])</a>"
|
||||
if(changed_voice)
|
||||
if(impersonating)
|
||||
track = "<a href='byond://?src=\ref[src];trackname=[html_encode(speaker_name)];track=\ref[impersonating]'>[speaker_name] ([jobname])</a>"
|
||||
else
|
||||
track = "[speaker_name] ([jobname])"
|
||||
else
|
||||
track = "<a href='byond://?src=\ref[src];trackname=[html_encode(speaker_name)];track=\ref[speaker]'>[speaker_name] ([jobname])</a>"
|
||||
|
||||
if(istype(src, /mob/dead/observer))
|
||||
if(speaker_name != speaker.real_name && !isAI(speaker)) //Announce computer and various stuff that broadcasts doesn't use it's real name but AI's can't pretend to be other mobs.
|
||||
|
||||
@@ -1290,3 +1290,22 @@
|
||||
W.update_icon()
|
||||
W.message = message
|
||||
W.add_fingerprint(src)
|
||||
|
||||
/mob/living/carbon/human/can_inject(var/mob/user, var/error_msg, var/target_zone)
|
||||
. = 1
|
||||
|
||||
if(!user)
|
||||
target_zone = pick("chest","chest","chest","left leg","right leg","left arm", "right arm", "head")
|
||||
else if(!target_zone)
|
||||
target_zone = user.zone_sel.selecting
|
||||
|
||||
switch(target_zone)
|
||||
if("head")
|
||||
if(head && head.flags & THICKMATERIAL)
|
||||
. = 0
|
||||
else
|
||||
if(wear_suit && wear_suit.flags & THICKMATERIAL)
|
||||
. = 0
|
||||
if(!. && error_msg && user)
|
||||
// Might need re-wording.
|
||||
user << "<span class='alert'>There is no exposed flesh or thin material [target_zone == "head" ? "on their head" : "on their body"] to inject into.</span>"
|
||||
|
||||
@@ -52,7 +52,7 @@ emp_act
|
||||
return -1 // complete projectile permutation
|
||||
|
||||
if(check_shields(P.damage, "the [P.name]"))
|
||||
P.on_hit(src, 2)
|
||||
P.on_hit(src, 2, def_zone)
|
||||
return 2
|
||||
|
||||
//BEGIN BOOK'S TASER NERF.
|
||||
|
||||
@@ -211,6 +211,9 @@
|
||||
O.emp_act(severity)
|
||||
..()
|
||||
|
||||
/mob/living/proc/can_inject()
|
||||
return 1
|
||||
|
||||
/mob/living/proc/get_organ_target()
|
||||
var/mob/shooter = src
|
||||
var/t = shooter:zone_sel.selecting
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
return 2
|
||||
if(!P.nodamage)
|
||||
apply_damage((P.damage/(absorb+1)), P.damage_type, def_zone, absorb, 0, P)
|
||||
P.on_hit(src, absorb)
|
||||
P.on_hit(src, absorb, def_zone)
|
||||
return absorb
|
||||
|
||||
/mob/living/hitby(atom/movable/AM as mob|obj,var/speed = 5)//Standardization and logging -Sieve
|
||||
|
||||
@@ -94,7 +94,7 @@ var/list/ai_list = list()
|
||||
/mob/living/silicon/ai/proc/ai_camera_list, /mob/living/silicon/ai/proc/ai_network_change, \
|
||||
/mob/living/silicon/ai/proc/ai_statuschange, /mob/living/silicon/ai/proc/ai_hologram_change, \
|
||||
/mob/living/silicon/ai/proc/toggle_camera_light)
|
||||
|
||||
|
||||
|
||||
if(!safety)//Only used by AIize() to successfully spawn an AI.
|
||||
if (!B)//If there is no player/brain inside.
|
||||
@@ -146,7 +146,7 @@ var/list/ai_list = list()
|
||||
/obj/machinery/ai_powersupply
|
||||
name="Power Supply"
|
||||
active_power_usage=1000
|
||||
use_power = 2
|
||||
use_power = 2
|
||||
power_channel = EQUIP
|
||||
var/mob/living/silicon/ai/powered_ai = null
|
||||
invisibility = 100
|
||||
@@ -155,12 +155,12 @@ var/list/ai_list = list()
|
||||
powered_ai = ai
|
||||
if(isnull(powered_ai))
|
||||
Del()
|
||||
|
||||
|
||||
loc = powered_ai.loc
|
||||
use_power(1) // Just incase we need to wake up the power system.
|
||||
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/ai_powersupply/process()
|
||||
if(!powered_ai || powered_ai.stat & DEAD)
|
||||
Del()
|
||||
@@ -410,8 +410,18 @@ var/list/ai_list = list()
|
||||
if(A && target)
|
||||
A.ai_actual_track(target)
|
||||
*/
|
||||
if(target)
|
||||
|
||||
//Strip off any "(as Derplord)".
|
||||
//If there's a way to do this via a var that doesn't give the AI extra info, please let me know.
|
||||
var/seeking = target.name
|
||||
var/index = findtext(seeking, "(as ")
|
||||
if(index)
|
||||
seeking = copytext(seeking, 1, index-1)
|
||||
|
||||
if(target && html_decode(href_list["trackname"]) == seeking)
|
||||
ai_actual_track(target)
|
||||
else
|
||||
src << "\red System error. Cannot locate [html_decode(href_list["trackname"])]."
|
||||
return
|
||||
|
||||
else if (href_list["faketrack"])
|
||||
|
||||
@@ -201,3 +201,9 @@
|
||||
dat += "<br>"
|
||||
src << browse(dat, "window=airoster")
|
||||
onclose(src, "airoster")
|
||||
|
||||
//can't inject synths
|
||||
/mob/living/silicon/can_inject(var/mob/user, var/error_msg)
|
||||
if(error_msg)
|
||||
user << "<span class='alert'>The armoured plating is too tough.</span>"
|
||||
return 0
|
||||
|
||||
@@ -139,7 +139,6 @@
|
||||
return
|
||||
|
||||
if(client.prefs.species != "Human")
|
||||
|
||||
if(!is_alien_whitelisted(src, client.prefs.species) && config.usealienwhitelist)
|
||||
src << alert("You are currently not whitelisted to play [client.prefs.species].")
|
||||
return 0
|
||||
@@ -155,9 +154,10 @@
|
||||
usr << "\blue There is an administrative lock on entering the game!"
|
||||
return
|
||||
|
||||
if(!is_alien_whitelisted(src, client.prefs.species) && config.usealienwhitelist)
|
||||
src << alert("You are currently not whitelisted to play [client.prefs.species].")
|
||||
return 0
|
||||
if(client.prefs.species != "Human")
|
||||
if(!is_alien_whitelisted(src, client.prefs.species) && config.usealienwhitelist)
|
||||
src << alert("You are currently not whitelisted to play [client.prefs.species].")
|
||||
return 0
|
||||
|
||||
AttemptLateSpawn(href_list["SelectedJob"])
|
||||
return
|
||||
|
||||
@@ -90,12 +90,17 @@
|
||||
origin_tech = "materials=2;syndicate=5"
|
||||
|
||||
|
||||
/obj/item/weapon/pen/paralysis/attack(mob/M as mob, mob/user as mob)
|
||||
/obj/item/weapon/pen/paralysis/attack(mob/living/M as mob, mob/user as mob)
|
||||
|
||||
if(!(istype(M,/mob)))
|
||||
return
|
||||
|
||||
..()
|
||||
if(reagents.total_volume)
|
||||
if(M.reagents) reagents.trans_to(M, 50)
|
||||
|
||||
|
||||
if(M.can_inject(user,1))
|
||||
if(reagents.total_volume)
|
||||
if(M.reagents) reagents.trans_to(M, 50)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -35,29 +35,29 @@
|
||||
var/d1 = 0
|
||||
var/d2 = 1
|
||||
layer = 2.44 //Just below unary stuff, which is at 2.45 and above pipes, which are at 2.4
|
||||
var/cable_color = COLOR_RED
|
||||
color = COLOR_RED
|
||||
var/obj/structure/powerswitch/power_switch
|
||||
|
||||
/obj/structure/cable/yellow
|
||||
cable_color = COLOR_YELLOW
|
||||
color = COLOR_YELLOW
|
||||
|
||||
/obj/structure/cable/green
|
||||
cable_color = COLOR_GREEN
|
||||
color = COLOR_GREEN
|
||||
|
||||
/obj/structure/cable/blue
|
||||
cable_color = COLOR_BLUE
|
||||
color = COLOR_BLUE
|
||||
|
||||
/obj/structure/cable/pink
|
||||
cable_color = COLOR_PINK
|
||||
color = COLOR_PINK
|
||||
|
||||
/obj/structure/cable/orange
|
||||
cable_color = COLOR_ORANGE
|
||||
color = COLOR_ORANGE
|
||||
|
||||
/obj/structure/cable/cyan
|
||||
cable_color = COLOR_CYAN
|
||||
color = COLOR_CYAN
|
||||
|
||||
/obj/structure/cable/white
|
||||
cable_color = COLOR_WHITE
|
||||
color = COLOR_WHITE
|
||||
|
||||
/obj/structure/cable/New()
|
||||
..()
|
||||
@@ -94,7 +94,6 @@
|
||||
/obj/structure/cable/proc/updateicon()
|
||||
icon_state = "[d1]-[d2]"
|
||||
alpha = invisibility ? 127 : 255
|
||||
color = cable_color
|
||||
|
||||
|
||||
// returns the powernet this cable belongs to
|
||||
@@ -126,9 +125,9 @@
|
||||
return
|
||||
|
||||
if(src.d1) // 0-X cables are 1 unit, X-X cables are 2 units long
|
||||
new/obj/item/weapon/cable_coil(T, 2, cable_color)
|
||||
new/obj/item/weapon/cable_coil(T, 2, color)
|
||||
else
|
||||
new/obj/item/weapon/cable_coil(T, 1, cable_color)
|
||||
new/obj/item/weapon/cable_coil(T, 1, color)
|
||||
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message("<span class='warning'>[user] cuts the cable.</span>", 1)
|
||||
@@ -190,12 +189,12 @@
|
||||
del(src)
|
||||
if(2.0)
|
||||
if (prob(50))
|
||||
new/obj/item/weapon/cable_coil(src.loc, src.d1 ? 2 : 1, cable_color)
|
||||
new/obj/item/weapon/cable_coil(src.loc, src.d1 ? 2 : 1, color)
|
||||
del(src)
|
||||
|
||||
if(3.0)
|
||||
if (prob(25))
|
||||
new/obj/item/weapon/cable_coil(src.loc, src.d1 ? 2 : 1, cable_color)
|
||||
new/obj/item/weapon/cable_coil(src.loc, src.d1 ? 2 : 1, color)
|
||||
del(src)
|
||||
return
|
||||
|
||||
@@ -229,16 +228,15 @@
|
||||
..()
|
||||
src.amount = length
|
||||
if (param_color)
|
||||
item_color = param_color
|
||||
color = param_color
|
||||
pixel_x = rand(-2,2)
|
||||
pixel_y = rand(-2,2)
|
||||
updateicon()
|
||||
update_wclass()
|
||||
|
||||
/obj/item/weapon/cable_coil/proc/updateicon()
|
||||
if (!item_color)
|
||||
item_color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_ORANGE, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN)
|
||||
color = item_color
|
||||
if (!color)
|
||||
color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_ORANGE, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN)
|
||||
if(amount == 1)
|
||||
icon_state = "coil1"
|
||||
name = "cable piece"
|
||||
@@ -422,7 +420,7 @@
|
||||
use(1)
|
||||
if (C.shock(user, 50))
|
||||
if (prob(50)) //fail
|
||||
new/obj/item/weapon/cable_coil(C.loc, 1, C.cable_color)
|
||||
new/obj/item/weapon/cable_coil(C.loc, 1, C.color)
|
||||
del(C)
|
||||
//src.laying = 1
|
||||
//last = C
|
||||
@@ -482,7 +480,7 @@
|
||||
use(1)
|
||||
if (NC.shock(user, 50))
|
||||
if (prob(50)) //fail
|
||||
new/obj/item/weapon/cable_coil(NC.loc, 1, NC.cable_color)
|
||||
new/obj/item/weapon/cable_coil(NC.loc, 1, NC.color)
|
||||
del(NC)
|
||||
|
||||
return
|
||||
@@ -521,7 +519,7 @@
|
||||
use(1)
|
||||
if (C.shock(user, 50))
|
||||
if (prob(50)) //fail
|
||||
new/obj/item/weapon/cable_coil(C.loc, 2, C.cable_color)
|
||||
new/obj/item/weapon/cable_coil(C.loc, 2, C.color)
|
||||
del(C)
|
||||
|
||||
return
|
||||
@@ -597,7 +595,6 @@ obj/structure/cable/proc/cableColor(var/colorC)
|
||||
var/color_n = "#DD0000"
|
||||
if(colorC)
|
||||
color_n = colorC
|
||||
cable_color = color_n
|
||||
color = color_n
|
||||
|
||||
/obj/item/weapon/cable_coil/cut
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
/obj/item/weapon/gun/verb/toggle_firerate()
|
||||
set name = "Toggle Firerate"
|
||||
set category = "Object"
|
||||
|
||||
firerate = !firerate
|
||||
if (firerate == 0)
|
||||
|
||||
if (firerate)
|
||||
loc << "You will now continue firing when your target moves."
|
||||
else
|
||||
loc << "You will now only fire once, then lower your aim, when your target moves."
|
||||
|
||||
@@ -62,14 +62,15 @@
|
||||
var/datum/reagents/R = reagent_list[reagent_list.len]
|
||||
R.add_reagent(reagent, 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/attack(mob/M as mob, mob/user as mob)
|
||||
/obj/item/weapon/reagent_containers/borghypo/attack(mob/living/M as mob, mob/user as mob)
|
||||
var/datum/reagents/R = reagent_list[mode]
|
||||
if(!R.total_volume)
|
||||
user << "\red The injector is empty."
|
||||
return
|
||||
if (!( istype(M, /mob) ))
|
||||
if (!(istype(M)))
|
||||
return
|
||||
if (R.total_volume)
|
||||
|
||||
if (R.total_volume && M.can_inject(user,1))
|
||||
user << "\blue You inject [M] with the injector."
|
||||
M << "\red You feel a tiny prick!"
|
||||
|
||||
|
||||
@@ -140,11 +140,23 @@
|
||||
return
|
||||
|
||||
if(ismob(target) && target != user)
|
||||
|
||||
var/time = 30 //Injecting through a hardsuit takes longer due to needing to find a port.
|
||||
|
||||
if(istype(target,/mob/living/carbon/human))
|
||||
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space))
|
||||
time = 60
|
||||
if(H.wear_suit)
|
||||
if(istype(H.wear_suit,/obj/item/clothing/suit/space))
|
||||
time = 60
|
||||
else if(!H.can_inject(user, 1))
|
||||
return
|
||||
|
||||
else if(isliving(target))
|
||||
|
||||
var/mob/living/M = target
|
||||
if(!M.can_inject(user, 1))
|
||||
return
|
||||
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
if(time == 30)
|
||||
|
||||
@@ -93,10 +93,18 @@
|
||||
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
|
||||
msg_admin_attack("UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
if(D.reagents)
|
||||
D.reagents.trans_to(M, 15)
|
||||
var/mob/living/T
|
||||
if(istype(M,/mob/living))
|
||||
T = M
|
||||
|
||||
M.visible_message("<span class='danger'>[M] is hit by the syringe!</span>")
|
||||
|
||||
if(T && istype(T) && T.can_inject())
|
||||
if(D.reagents)
|
||||
D.reagents.trans_to(M, 15)
|
||||
else
|
||||
M.visible_message("<span class='danger'>The syringe bounces off [M]!</span>")
|
||||
|
||||
del(D)
|
||||
break
|
||||
if(D)
|
||||
|
||||
@@ -199,6 +199,7 @@ var/MAX_EXPLOSION_RANGE = 14
|
||||
#define MASKCOVERSMOUTH 2048 // on other items, these are just for mask/head
|
||||
#define HEADCOVERSMOUTH 2048
|
||||
|
||||
#define THICKMATERIAL 1024 //From /tg: prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. (NOTE: flag shared with NOSLIP for shoes)
|
||||
#define NOSLIP 1024 //prevents from slipping on wet floors, in space etc
|
||||
|
||||
#define OPENCONTAINER 4096 // is an open container for chemistry purposes
|
||||
|
||||
Reference in New Issue
Block a user