Merge remote-tracking branch 'upstream/dev' into bs12-zuhweapons

This commit is contained in:
Mloc-Hibernia
2014-05-11 13:48:51 +00:00
29 changed files with 200 additions and 101 deletions

View File

@@ -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?"

View File

@@ -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 .

View File

@@ -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))

View File

@@ -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()

View File

@@ -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>

View File

@@ -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

View File

@@ -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)

View File

@@ -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'*/
)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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.

View File

@@ -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>"

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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"])

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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."

View File

@@ -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!"

View File

@@ -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)

View File

@@ -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)

View File

@@ -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