Bay12 examine overhaul.

This commit overhauls the examine system to baystation's latest system,
including a more efficient verb approach, and a new status panel tab,
which shows more information for pre-defined objects.
This commit is contained in:
Tigercat2000
2015-09-14 11:51:40 -07:00
parent cfbbf104ac
commit 0603f73232
146 changed files with 1381 additions and 1090 deletions
+5 -7
View File
@@ -140,15 +140,13 @@
return
examine()
set src in view()
..()
if((in_range(src, usr) || loc == usr))
examine(mob/user)
..(user)
if((in_range(src, user) || loc == user))
if(secured)
usr << "\The [src] is ready!"
user << "\The [src] is ready!"
else
usr << "\The [src] can be attached!"
return
user << "\The [src] can be attached!"
attack_self(mob/user as mob)
+3 -3
View File
@@ -11,9 +11,9 @@
var/obj/item/device/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
var/obj/item/weapon/tank/bombtank = null //the second part of the bomb is a plasma tank
/obj/item/device/onetankbomb/examine()
..()
bombtank.examine()
/obj/item/device/onetankbomb/examine(mob/user)
..(user)
user.examinate(bombtank)
/obj/item/device/onetankbomb/update_icon()
if(bombtank)
+5 -7
View File
@@ -63,15 +63,13 @@
master.update_icon()
examine()
set src in view()
..()
if ((in_range(src, usr) || src.loc == usr))
examine(mob/user)
..(user)
if ((in_range(src, user) || src.loc == user))
if (src.secured)
usr << "\The [src] is ready!"
user << "\The [src] is ready!"
else
usr << "\The [src] can be attached!"
return
user << "\The [src] can be attached!"
HasProximity(atom/movable/AM as mob|obj)
+3 -3
View File
@@ -8,10 +8,10 @@
bomb_name = "contact mine"
examine()
..()
examine(mob/user)
..(user)
if(armed)
usr << "It looks like it's armed."
user << "It looks like it's armed."
activate()
if(..())
+7 -13
View File
@@ -188,11 +188,6 @@ BLIND // can't see anything
/obj/item/clothing/gloves/proc/Touch()
return
/obj/item/clothing/gloves/examine()
set src in usr
..()
return
/obj/item/clothing/under/proc/set_sensors(mob/usr as mob)
var/mob/M = usr
if (istype(M, /mob/dead/)) return
@@ -460,21 +455,20 @@ BLIND // can't see anything
return
return
/obj/item/clothing/under/examine()
set src in view()
..()
/obj/item/clothing/under/examine(mob/user)
..(user)
switch(src.sensor_mode)
if(0)
usr << "Its sensors appear to be disabled."
user << "Its sensors appear to be disabled."
if(1)
usr << "Its binary life sensors appear to be enabled."
user << "Its binary life sensors appear to be enabled."
if(2)
usr << "Its vital tracker appears to be enabled."
user << "Its vital tracker appears to be enabled."
if(3)
usr << "Its vital tracker and tracking beacon appear to be enabled."
user << "Its vital tracker and tracking beacon appear to be enabled."
if(accessories.len)
for(var/obj/item/clothing/accessory/A in accessories)
usr << "\A [A] is attached to it."
user << "\A [A] is attached to it."
/obj/item/clothing/under/verb/rollsuit()
+4 -4
View File
@@ -19,11 +19,11 @@
icon_state = "d_[initial(icon_state)]"
else
icon_state = initial(icon_state)
examine()
..()
usr << "This one is made of [material]."
examine(mob/user)
..(user)
user << "This one is made of [material]."
if(stud)
usr << "It is adorned with a single gem."
user << "It is adorned with a single gem."
/obj/item/clothing/gloves/ring/attackby(obj/item/I as obj, mob/user as mob, params)
if(istype(I, /obj/item/stack/sheet/mineral/diamond))
+1 -1
View File
@@ -25,7 +25,7 @@
return flags & NOSLIP
/obj/item/clothing/shoes/magboots/examine(mob/user)
..()
..(user)
user << "Its mag-pulse traction system appears to be [magpulse ? "enabled" : "disabled"]."
+3 -4
View File
@@ -231,11 +231,10 @@
magpulse = 0
flags &= ~NODROP
/obj/item/clothing/shoes/magboots/vox/examine()
set src in view()
..()
/obj/item/clothing/shoes/magboots/vox/examine(mob/user)
..(user)
if (magpulse)
usr << "It would be hard to take these off without relaxing your grip first." //theoretically this message should only be seen by the wearer when the claws are equipped.
user << "It would be hard to take these off without relaxing your grip first." //theoretically this message should only be seen by the wearer when the claws are equipped.
/obj/item/clothing/suit/space/eva/vox
name = "Vox EVA Suit"
+3 -3
View File
@@ -214,8 +214,8 @@ var/global/list/breach_burn_descriptors = list(
..()
/obj/item/clothing/suit/space/examine()
..()
/obj/item/clothing/suit/space/examine(mob/user)
..(user)
if(can_breach && breaches && breaches.len)
for(var/datum/breach/B in breaches)
usr << "\red <B>It has \a [B.descriptor].</B>"
user << "\red <B>It has \a [B.descriptor].</B>"
+4 -5
View File
@@ -18,10 +18,9 @@
camera.c_tag = user.name
user << "\blue User scanned as [camera.c_tag]. Camera activated."
/obj/item/clothing/head/helmet/space/rig/ert/examine()
..()
if(get_dist(usr,src) <= 1)
usr << "This helmet has a built-in camera. It's [camera ? "" : "in"]active."
/obj/item/clothing/head/helmet/space/rig/ert/examine(mob/user)
if(..(user, 1))
user << "This helmet has a built-in camera. It's [camera ? "" : "in"]active."
/obj/item/clothing/suit/space/rig/ert
name = "emergency response team suit"
@@ -89,7 +88,7 @@
name = "emergency response team medical suit"
desc = "A suit worn by medical members of a Nanotrasen Emergency Response Team. Has white highlights. Armoured and space ready."
icon_state = "ert_medical"
//Janitor
/obj/item/clothing/head/helmet/space/rig/ert/janitor
name = "emergency response team janitor helmet"
@@ -21,7 +21,7 @@
var/extinguishes_left=10 // Yeah yeah, reagents, blah blah blah. This should be simple.
/obj/item/clothing/suit/space/eva/plasmaman/examine(mob/user)
..()
..(user)
user << "<span class='info'>There are [extinguishes_left] extinguisher canisters left in this suit.</span>"
/obj/item/clothing/suit/space/eva/plasmaman/proc/Extinguish(var/mob/user)
@@ -328,6 +328,5 @@
user << "<span class='notice'>User scanned as [camera.c_tag]. Camera activated.</span>"
/obj/item/clothing/head/helmet/space/eva/plasmaman/nuclear/examine(mob/user)
..()
if(get_dist(user,src) <= 1)
if(..(user, 1))
user << "<span class='info'>This helmet has a built-in camera. It's [camera ? "" : "in"]active.</span>"
@@ -0,0 +1,166 @@
/obj/machinery/atmospherics/pipe
description_info = "This pipe, and all other pipes, can be connected or disconnected by a wrench. The internal pressure of the pipe must \
be below 300 kPa to do this. More pipes can be obtained from the pipe dispenser."
/obj/machinery/atmospherics/pipe/New() //This is needed or else 20+ lines of copypasta to dance around inheritence.
..()
description_info += "<br>Most pipes and atmospheric devices can be connected or disconnected with a wrench. The pipe's pressure must not be too high, \
or if it is a device, it must be turned off first."
//HE pipes
/obj/machinery/atmospherics/pipe/simple/heat_exchanging
description_info = "This radiates heat from the pipe's gas to space, cooling it down."
//Supply/Scrubber pipes
/obj/machinery/atmospherics/pipe/simple/visible/scrubbers
description_info = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
/obj/machinery/atmospherics/pipe/simple/visible/supply
description_info = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
/obj/machinery/atmospherics/pipe/simple/hidden/supply
description_info = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers
description_info = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
//Universal adapters
/obj/machinery/atmospherics/pipe/simple/visible/universal
description_info = "This allows you to connect 'normal' pipes, red 'scrubber' pipes, and blue 'supply' pipes."
/obj/machinery/atmospherics/pipe/simple/hidden/universal
description_info = "This allows you to connect 'normal' pipes, red 'scrubber' pipes, and blue 'supply' pipes."
//Three way manifolds
/obj/machinery/atmospherics/pipe/manifold
description_info = "A normal pipe with three ends to connect to."
/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers
description_info = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
/obj/machinery/atmospherics/pipe/manifold/visible/supply
description_info = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers
description_info = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
/obj/machinery/atmospherics/pipe/manifold/hidden/supply
description_info = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
//Insulated pipes
/obj/machinery/atmospherics/pipe/simple/insulated
description_info = "This is completely useless, use a normal pipe." //Sorry, but it's true.
//Four way manifolds
/obj/machinery/atmospherics/pipe/manifold4w
description_info = "This is a four-way pipe."
/obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers
description_info = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply
description_info = "This is a special 'supply' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers
description_info = "This is a special 'scrubber' pipe, which does not connect to 'normal' pipes. If you want to connect it, use \
a Universal Adapter pipe."
//Endcaps
/obj/machinery/atmospherics/pipe/cap
description_info = "This is a cosmetic attachment, as pipes currently do not spill their contents into the air."
//T-shaped valves
/obj/machinery/atmospherics/tvalve
description_info = "Click this to toggle the mode. The direction with the green light is where the gas will flow."
//Normal valves
/obj/machinery/atmospherics/valve
description_info = "Click this to turn the valve. If red, the pipes on each end are seperated. Otherwise, they are connected."
//TEG ports
/obj/machinery/atmospherics/binary/circulator
description_info = "This generates electricity, depending on the difference in temperature between each side of the machine. The meter in \
the center of the machine gives an indicator of how much elecrtricity is being generated."
//Passive gates
/obj/machinery/atmospherics/binary/passive_gate
description_info = "This is a one-way regulator, allowing gas to flow only at a specific pressure and flow rate. If the light is green, it is flowing."
//Normal pumps (high power one inherits from this)
/obj/machinery/atmospherics/binary/pump
description_info = "This moves gas from one pipe to another. A higher target pressure demands more energy. The side with the red end is the output."
//Vents
/obj/machinery/atmospherics/unary/vent_pump
description_info = "This pumps the contents of the attached pipe out into the atmosphere, if needed. It can be controlled from an Air Alarm."
//Freezers
/obj/machinery/atmospherics/unary/freezer
description_info = "Cools down the gas of the pipe it is connected to. It uses massive amounts of electricity while on. \
It can be upgraded by replacing the capacitors, manipulators, and matter bins. It can be deconstructed by screwing the maintenance panel open with a \
screwdriver, and then using a crowbar."
//Heaters
/obj/machinery/atmospherics/unary/heater
description_info = "Heats up the gas of the pipe it is connected to. It uses massive amounts of electricity while on. \
It can be upgraded by replacing the capacitors, manipulators, and matter bins. It can be deconstructed by screwing the maintenance panel open with a \
screwdriver, and then using a crowbar."
//Gas injectors
/obj/machinery/atmospherics/unary/outlet_injector
description_info = "Outputs the pipe's gas into the atmosphere, similar to an airvent. It can be controlled by a nearby atmospherics computer. \
A green light on it means it is on."
//Scrubbers
/obj/machinery/atmospherics/unary/vent_scrubber
description_info = "This filters the atmosphere of harmful gas. Filtered gas goes to the pipes connected to it, typically a scrubber pipe. \
It can be controlled from an Air Alarm. It can be configured to drain all air rapidly with a 'panic syphon' from an air alarm."
//Omni filters
/obj/machinery/atmospherics/omni/filter
description_info = "Filters gas from a custom input direction, with up to two filtered outputs and a 'everything else' \
output. The filtered output's arrows glow orange."
//Omni mixers
/obj/machinery/atmospherics/omni/mixer
description_info = "Combines gas from custom input and output directions. The percentage of combined gas can be defined."
//Canisters
/obj/machinery/portable_atmospherics/canister
description_info = "The canister can be connected to a connector port with a wrench. Tanks of gas (the kind you can hold in your hand) \
can be filled by the canister, by using the tank on the canister, increasing the release pressure, then opening the valve until it is full, and then close it. \
*DO NOT* remove the tank until the valve is closed. A gas analyzer can be used to check the contents of the canister."
description_antag = "Canisters can be damaged, spilling their contents into the air, or you can just leave the release valve open."
//Portable pumps
/obj/machinery/portable_atmospherics/powered/pump
description_info = "Invaluable for filling air in a room rapidly after a breach repair. The internal gas container can be filled by \
connecting it to a connector port. The pump can pump the air in (sucking) or out (blowing), at a specific target pressure. The powercell inside can be \
replaced by using a screwdriver, and then adding a new cell. A tank of gas can also be attached to the air pump."
//Portable scrubbers
/obj/machinery/portable_atmospherics/powered/scrubber
description_info = "Filters the air, placing harmful gases into the internal gas container. The container can be emptied by \
connecting it to a connector port. The pump can pump the air in (sucking) or out (blowing), at a specific target pressure. The powercell inside can be \
replaced by using a screwdriver, and then adding a new cell. A tank of gas can also be attached to the scrubber. "
//Meters
/obj/machinery/meter
description_info = "Measures the volume and temperature of the pipe under the meter."
//Pipe dispensers
/obj/machinery/pipedispenser
description_info = "This can be moved by using a wrench. You will need to wrench it again when you want to use it. You can put \
excess (atmospheric) pipes into the dispenser, as well. The dispenser requires electricity to function."
@@ -0,0 +1,35 @@
/obj/machinery/power/supermatter
description_info = "When energized by a laser (or something hitting it), it emits radiation and heat. If the heat reaches above 7000 kelvin, it will send an alert and start taking damage. \
After integrity falls to zero percent, it will delaminate, causing a massive explosion, station-wide radiation spikes, and hallucinations. \
Supermatter reacts badly to oxygen in the atmosphere. It'll also heat up really quick if it is in vacuum.<br>\
<br>\
Supermatter cores are extremely dangerous to be close to, and requires protection to handle properly. The protection you will need is:<br>\
Optical meson scanners on your eyes, to prevent hallucinations when looking at the supermatter.<br>\
Radiation helmet and suit, as the supermatter is radioactive.<br>\
<br>\
Touching the supermatter will result in *instant death*, with no corpse left behind! You can drag the supermatter, but anything else will kill you. \
It is advised to obtain a genetic backup before trying to drag it."
description_antag = "Exposing the supermatter to oxygen or vaccum will cause it to start rapidly heating up. Sabotaging the supermatter and making it explode will \
cause a period of lag as the explosion is processed by the server, as well as irradiating the entire station and causing hallucinations to happen. \
Wearing radiation equipment will protect you from most of the delamination effects sans explosion."
/obj/machinery/power/apc
description_info = "An APC (Area Power Controller) regulates and supplies backup power for the area they are in. Their power channels are divided \
out into 'environmental' (Items that manipulate airflow and temperature), 'lighting' (the lights), and 'equipment' (Everything else that consumes power). \
Power consumption and backup power cell charge can be seen from the interface, further controls (turning a specific channel on, off or automatic, \
toggling the APC's ability to charge the backup cell, or toggling power for the entire area via master breaker) first requires the interface to be unlocked \
with an ID with Engineering access or by one of the station's robots or the artificial intelligence."
description_antag = "This can be emagged to unlock it. It will cause the APC to have a blue error screen. \
Wires can be pulsed remotely with a signaler attached to it. A powersink will also drain any APCs connected to the same wire the powersink is on."
/obj/item/inflatable
description_info = "Inflate by using it in your hand. The inflatable barrier will inflate on your tile. To deflate it, use the 'deflate' verb."
/obj/structure/inflatable
description_info = "To remove these safely, use the 'deflate' verb. Hitting these with any objects will probably puncture and break it forever."
/obj/structure/inflatable/door
description_info = "Click the door to open or close it. It only stops air while closed.<br>\
To remove these safely, use the 'deflate' verb. Hitting these with any objects will probably puncture and break it forever."
@@ -0,0 +1,42 @@
/obj/machinery/bodyscanner
description_info = "The advanced scanner detects and reports internal injuries such as bone fractures, internal bleeding, and organ damage. \
This is useful if you are about to perform surgery.<br>\
<br>\
Click your target with Grab intent, then click on the scanner to place them in it. Click the red terminal to operate. \
Right-click the scanner and click 'Eject Occupant' to remove them. You can enter the scanner yourself in a similar way, using the 'Enter Body Scanner' \
verb."
/obj/machinery/atmospherics/unary/cryo_cell
description_info = "The cryogenic chamber, or 'cryo', treats most damage types, most notably genetic damage. It also stabilizes patients \
in critical condition by placing them in stasis, so they can be treated at a later time.<br>\
<br>\
In order for it to work, it must be loaded with chemicals, and the temperature of the solution must reach a certain point. Additionally, it \
requires a supply of pure oxygen, provided by canisters that are attached. The most commonly used chemicals in the chambers are Cryoxadone and \
Clonexadone. Clonexadone is more effective in treating all damage, including Genetic damage, but is otherwise functionally identical.<br>\
<br>\
Activating the freezer nearby, and setting it to a temperature setting below 150, is recommended before operation! Further, any clothing the patient \
is wearing that act as an insulator will reduce its effectiveness, and should be removed.<br>\
<br>\
Clicking the tube with a beaker full of chemicals in hand will place it in its storage to distribute when it is activated.<br>\
<br>\
Click your target with Grab intent, then click on the tube, with an empty hand, to place them in it. Click the tube again to open the menu. \
Press the button on the menu to activate it. Once they have reached 100 health, right-click the cell and click 'Eject Occupant' to remove them. \
Remember to turn it off, once you've finished, to save power and chemicals!"
/obj/machinery/optable
description_info = "Click your target with Grab intent, then click on the table with an empty hand, to place them on it."
/obj/machinery/computer/operating
description_info = "This console gives information on the status of the patient on the adjacent operating table, notably their consciousness."
/obj/machinery/sleeper
description_info = "The sleeper allows you to clean the blood by means of dialysis, and to administer medication in a controlled environment.<br>\
<br>\
Click your target with Grab intent, then click on the sleeper to place them in it. Click the green console, with an empty hand, to open the menu. \
Click 'Start Dialysis' to begin filtering unwanted chemicals from the occupant's blood. The beaker contained will begin to fill with their \
contaminated blood, and will need to be emptied when full.<br>\
<br>\
You can also inject common medicines directly into their bloodstream.\
<br>\
Right-click the cell and click 'Eject Occupant' to remove them. You can enter the cell yourself by right clicking and selecting 'Enter Sleeper'. \
Note that you cannot control the sleeper while inside of it."
@@ -0,0 +1,8 @@
/mob/living/silicon/robot/drone
description_info = "Drones are player-controlled synthetics which are lawed to maintain the station and not \
interact with anyone else, except for other drones. They hold a wide array of tools to build, repair, maintain, and clean. \
They fuction similarly to other synthetics, in that they require recharging regularly, have laws, and are resilient to many hazards, \
such as fire, radiation, vacuum, and more. Ghosts can join the round as a maintenance drone by using the appropriate verb in the 'ghost' tab. \
An inactive drone can be rebooted by swiping an ID card on it with engineering or robotics access."
description_antag = "An Electromagnetic Sequencer can be used to subvert the drone to your cause."
@@ -0,0 +1,24 @@
/obj/item/stack/rods
description_info = "Made from metal sheets. You can build a grille by using it in your hand. \
Clicking on a floor without any tiles will reinforce the floor. You can make reinforced glass by combining rods and normal glass sheets."
/obj/item/stack/sheet/glass
description_info = "Use in your hand to build a window. Can be upgraded to reinforced glass by adding metal rods, which are made from metal sheets."
/obj/item/stack/sheet/glass/cyborg
description_info = "Use in your hand to build a window. Can be upgraded to reinforced glass by adding metal rods, which are made from metal sheets.<br>\
As a synthetic, you can acquire more sheets of glass by recharging."
/obj/item/stack/sheet/glass/reinforced
description_info = "Use in your hand to build a window. Reinforced glass is much stronger against damage."
/obj/item/stack/sheet/glass/reinforced/cyborg
description_info = "Use in your hand to build a window. Reinforced glass is much stronger against damage.<br>\
As a synthetic, you can gain more reinforced glass by recharging."
/obj/item/stack/sheet/metal/cyborg
description_info = "Use in your hand to bring up the recipe menu. If you have enough sheets, click on something on the list to build it.<br>\
You can replenish your supply of metal as a synthetic by recharging."
/obj/item/stack/sheet
description_info = "Use in your hand to bring up the recipe menu. If you have enough sheets, click on something on the list to build it."
@@ -0,0 +1,21 @@
/obj/structure/girder
description_info = "Use metal sheets on this to build a normal wall. Adding plasteel instead will make a reinforced wall.<br>\
A false wall can be made by using a crowbar on this girder, and then adding metal or plasteel.<br>\
You can dismantle the grider with a wrench."
/obj/structure/girder/reinforced
description_info = "Add another sheet of plasteel to finish."
/obj/structure/grille
description_info = "A powered and knotted wire underneath this will cause the grille to shock anyone not wearing insulated gloves.<br>\
Wirecutters will turn the grille into metal rods instantly. Grilles are made with metal rods."
/obj/structure/lattice
description_info = "Add a metal floor tile to build a floor on top of the lattice.<br>\
Lattices can be made by applying metal rods to a space tile."
/obj/structure/bed
description_info = "Click and drag yourself (or anyone) to this to buckle in. Click on this with an empty hand to undo the buckles.<br>\
<br>\
Anyone with restraints, such as handcuffs, will not be able to unbuckle themselves. They must use the Resist button, or verb, to break free of \
the buckles, instead."
@@ -0,0 +1,3 @@
/turf/simulated/wall
description_info = "You can deconstruct this by welding it, and then wrenching the girder.<br>\
You can build a wall by using metal sheets and making a girder, then adding more metal or plasteel."
@@ -0,0 +1,81 @@
/*
Note: This file is meant for actual weapons (guns, swords, etc), and not the stupid 'every obj is a weapon, except when it's not' thing.
*/
//******
//*Guns*
//******
//This contains a lot of copypasta but I'm told it's better then a lot of New()s appending the var.
/obj/item/weapon/gun
description_info = "This is a gun. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire."
/obj/item/weapon/gun/energy
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger."
/obj/item/weapon/gun/energy/crossbow
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire."
description_antag = "This is a stealthy weapon which fires poisoned bolts at your target. When it hits someone, they will suffer a stun effect, in \
addition to toxins. The energy crossbow recharges itself slowly, and can be concealed in your pocket or bag."
/obj/item/weapon/gun/energy/gun
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To switch between stun and lethal, click the weapon \
in your hand. To recharge this weapon, use a weapon recharger."
/obj/item/weapon/gun/energy/gun/taser
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger."
/obj/item/weapon/gun/energy/gun/stunrevolver
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger."
/obj/item/weapon/gun/energy/gun/nuclear
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To switch between stun and lethal, click the weapon \
in your hand. Unlike most weapons, this weapon recharges itself."
/obj/item/weapon/gun/energy/captain
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. Most energy weapons can fire through windows harmlessly. Unlike most weapons, this weapon recharges itself."
/obj/item/weapon/gun/energy/sniperrifle
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger. \
To use the scope, use the appropriate verb in the object tab."
/obj/item/weapon/gun/projectile
description_info = "This is a ballistic weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. To reload, click the weapon in your hand to unload (if needed), then add the appropiate ammo. The description \
will tell you what caliber you need."
/obj/item/weapon/gun/projectile/shotgun/pump
description_info = "This is a ballistic weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. After firing, you will need to pump the gun, by clicking on the gun in your hand. To reload, load more shotgun \
shells into the gun."
/obj/item/weapon/gun/projectile/heavysniper
description_info = "This is a ballistic weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. The gun's chamber can be opened or closed by using it in your hand. To reload, open the chamber, add a new bullet \
then close it. To use the scope, use the appropriate verb in the object tab."
//*******
//*Melee*
//*******
/obj/item/weapon/melee/baton
description_info = "The baton needs to be turned on to apply the stunning effect. Use it in your hand to toggle it on or off. If your intent is \
set to 'harm', you will inflict damage when using it, regardless if it is on or not. Each stun reduces the baton's charge, which can be replenished by \
putting it inside a weapon recharger."
/obj/item/weapon/melee/energy/sword
description_antag = "The energy sword is a very strong melee weapon, capable of severing limbs easily, if they are targeted. It can also has a chance \
to block projectiles and melee attacks while it is on and being held. The sword can be toggled on or off by using it in your hand. While it is off, \
it can be concealed in your pocket or bag."
/obj/item/weapon/melee/cultblade
description_antag = "This sword is a powerful weapon, capable of severing limbs easily, if they are targeted. Nonbelivers are unable to use this weapon."
+71
View File
@@ -0,0 +1,71 @@
/* This code is responsible for the examine tab. When someone examines something, it copies the examined object's description_info,
description_fluff, and description_antag, and shows it in a new tab.
In this file, some atom and mob stuff is defined here. It is defined here instead of in the normal files, to keep the whole system self-contained.
This means that this file can be unchecked, along with the other examine files, and can be removed entirely with no effort.
*/
/atom/
var/description_info = null //Helpful blue text.
var/description_fluff = null //Green text about the atom's fluff, if any exists.
var/description_antag = null //Malicious red text, for the antags.
//Override these if you need special behaviour for a specific type.
/atom/proc/get_description_info()
if(description_info)
return description_info
return
/atom/proc/get_description_fluff()
if(description_fluff)
return description_fluff
return
/atom/proc/get_description_antag()
if(description_antag)
return description_antag
return
/mob/living/get_description_fluff()
if(flavor_text) //Get flavor text for the green text.
return flavor_text
else //No flavor text? Try for hardcoded fluff instead.
return ..()
/mob/living/carbon/human/get_description_fluff()
return print_flavor_text(0)
/* The examine panel itself */
/client/var/description_holders[0]
/client/proc/update_description_holders(atom/A, update_antag_info=0)
description_holders["info"] = A.get_description_info()
description_holders["fluff"] = A.get_description_fluff()
description_holders["antag"] = (update_antag_info)? A.get_description_antag() : ""
description_holders["name"] = "[A.name]"
description_holders["icon"] = "\icon[A]"
description_holders["desc"] = A.desc
/client/Stat()
. = ..()
if(usr && statpanel("Examine"))
stat(null,"[description_holders["icon"]] <font size='5'>[description_holders["name"]]</font>") //The name, written in big letters.
stat(null,"[description_holders["desc"]]") //the default examine text.
if(description_holders["info"])
stat(null,"<font color='#084B8A'><b>[description_holders["info"]]</b></font>") //Blue, informative text.
if(description_holders["fluff"])
stat(null,"<font color='#298A08'><b>[description_holders["fluff"]]</b></font>") //Yellow, fluff-related text.
if(description_holders["antag"])
stat(null,"<font color='#8A0808'><b>[description_holders["antag"]]</b></font>") //Red, malicious antag-related text
//override examinate verb to update description holders when things are examined
/mob/examinate(atom/A as mob|obj|turf in view())
if(..())
return 1
var/is_antag = (isAntag(src) || isobserver(src)) //ghosts don't have minds
if(client)
client.update_description_holders(A, is_antag)
+18 -4
View File
@@ -396,10 +396,13 @@
// EXAMINE PROC // This proc is massive, messy, and probably could be handled better.
////////////////////////////// Feel free to try cleaning it up if you think of a better way to do it.
/obj/machinery/fishtank/examine()
..()
/obj/machinery/fishtank/examine(mob/user)
..(user)
var/examine_message = ""
//Approximate water level
examine_message += "Water level: "
if(water_level == 0)
examine_message += "\The [src] is empty! "
else if(water_level < water_capacity * 0.1)
@@ -415,6 +418,8 @@
else if (water_level == water_capacity)
examine_message += "\The [src] is full! "
examine_message += "<br>Cleanliness level: "
//Approximate filth level
if(filth_level == 0)
examine_message += "[src] is spotless! "
@@ -429,6 +434,8 @@
else if(filth_level == 10)
examine_message += "[src] is absolutely disgusting! Someone should clean it NOW! "
examine_message += "<br>Food level: "
//Approximate food level
if(!fish_count) //Check if there are fish in the tank
if(food_level > 0) //Don't report a tank that has neither fish nor food in it
@@ -445,7 +452,9 @@
//Report the number of harvestable eggs
if(egg_count) //Don't bother if there isn't any eggs
examine_message += "There are [egg_count] eggs able to be harvested! "
examine_message += "<br>There are [egg_count] eggs able to be harvested! "
examine_message += "<br>"
//Report the number and types of live fish if there is water in the tank
if(fish_count == 0)
@@ -465,6 +474,8 @@
//Display the number of fish and previously constructed message
examine_message += "\The [src] contains [fish_count] live fish. [message] "
examine_message += "<br>"
//Report lid state for tanks and wall-tanks
if(has_lid) //Only report if the tank actually has a lid
//Report lid state
@@ -473,6 +484,8 @@
else
examine_message += "The lid is open. "
examine_message += "<br>"
//Report if the tank is leaking/cracked
if(water_level > 0) //Tank has water, so it's actually leaking
if(leaking == 1) examine_message += "\The [src] is leaking."
@@ -483,7 +496,8 @@
//Finally, report the full examine_message constructed from the above reports
usr << "[examine_message]"
user << "[examine_message]"
return examine_message
//////////////////////////////
// ATACK PROCS //
+3 -3
View File
@@ -382,11 +382,11 @@
qdel(O)
return ..()
/obj/item/weapon/reagent_containers/food/snacks/customizable/examine()
..()
/obj/item/weapon/reagent_containers/food/snacks/customizable/examine(mob/user)
..(user)
var/whatsinside = pick(ingredients)
usr << "<span class='notice'> You think you can see [whatsinside] in there.</span>"
user << "<span class='notice'> You think you can see [whatsinside] in there.</span>"
/*
/obj/item/weapon/reagent_containers/food/snacks/customizable/attack(mob/M as mob, mob/user as mob, def_zone) //SNOOOOOOOWFLAAAAAAAAAAAAAAAAAKES
+4 -4
View File
@@ -181,12 +181,12 @@
update_icon()
user.visible_message("\The [user] [concealed ? "conceals" : "reveals"] their hand.")
/obj/item/weapon/hand/examine()
..()
/obj/item/weapon/hand/examine(mob/user)
..(user)
if((!concealed || src.loc == usr) && cards.len)
usr << "It contains: "
user << "It contains: "
for(var/datum/playingcard/P in cards)
usr << "The [P.name]."
user << "The [P.name]."
/obj/item/weapon/hand/update_icon()
+12 -13
View File
@@ -779,31 +779,30 @@
else if(dead)
remove_dead(user)
/obj/machinery/portable_atmospherics/hydroponics/examine()
..()
/obj/machinery/portable_atmospherics/hydroponics/examine(mob/user)
..(user)
if(!seed)
usr << "[src] is empty."
user << "[src] is empty."
return
usr << "<span class='notice'>[seed.display_name]</span> are growing here.</span>"
user << "<span class='notice'>[seed.display_name]</span> are growing here.</span>"
if(!Adjacent(usr))
if(!Adjacent(user))
return
usr << "Water: [round(waterlevel,0.1)]/100"
usr << "Nutrient: [round(nutrilevel,0.1)]/10"
user << "Water: [round(waterlevel,0.1)]/100"
user << "Nutrient: [round(nutrilevel,0.1)]/10"
if(weedlevel >= 5)
usr << "\The [src] is <span class='danger'>infested with weeds</span>!"
user << "\The [src] is <span class='danger'>infested with weeds</span>!"
if(pestlevel >= 5)
usr << "\The [src] is <span class='danger'>infested with tiny worms</span>!"
user << "\The [src] is <span class='danger'>infested with tiny worms</span>!"
if(dead)
usr << "<span class='danger'>The plant is dead.</span>"
user << "<span class='danger'>The plant is dead.</span>"
else if(health <= (seed.get_trait(TRAIT_ENDURANCE)/ 2))
usr << "The plant looks <span class='danger'>unhealthy</span>."
user << "The plant looks <span class='danger'>unhealthy</span>."
if(mechanical)
var/turf/T = loc
@@ -831,7 +830,7 @@
light_available = 5
light_string = "a light level of [light_available] lumens"
usr << "The tray's sensor suite is reporting [light_string] and a temperature of [environment.temperature]K."
user << "The tray's sensor suite is reporting [light_string] and a temperature of [environment.temperature]K."
/obj/machinery/portable_atmospherics/hydroponics/verb/close_lid_verb()
set name = "Toggle Tray Lid"
+4 -4
View File
@@ -436,9 +436,9 @@
user << "<span class='info'>There's no points left on [src].</span>"
..()
/obj/item/weapon/card/mining_point_card/examine()
..()
usr << "There's [points] points on the card."
/obj/item/weapon/card/mining_point_card/examine(mob/user)
..(user)
user << "There's [points] points on the card."
/**********************Jaunter**********************/
@@ -778,7 +778,7 @@
malfunctioning = 1
/obj/item/weapon/lazarus_injector/examine(mob/user)
..()
..(user)
if(!loaded)
user << "<span class='info'>[src] is empty.</span>"
if(malfunctioning)
+10 -14
View File
@@ -96,7 +96,7 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
return 1
/*
Transfer_mind is there to check if mob is being deleted/not going to have a body.
@@ -192,7 +192,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return
/mob/dead/observer/Move(NewLoc, direct)
/mob/dead/observer/Move(NewLoc, direct)
following = null
dir = direct
if(NewLoc)
@@ -221,16 +221,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/area/A = get_area_master(src)
if(A)
A.Entered(src)
..()
/mob/dead/observer/experience_pressure_difference()
return 0
/mob/dead/observer/examine()
if(usr)
usr << desc
/mob/dead/observer/can_use_hands() return 0
/mob/dead/observer/is_active() return 0
@@ -325,15 +321,15 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set category = "Ghost"
set name = "Teleport"
set desc= "Teleport to a location"
if(!isobserver(usr))
usr << "Not when you're not dead!"
return
usr.verbs -= /mob/dead/observer/proc/dead_tele
spawn(30)
usr.verbs += /mob/dead/observer/proc/dead_tele
var/area/thearea = ghostteleportlocs[A]
if(!thearea) return
@@ -414,7 +410,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
/mob/Life()
// to catch teleports etc which directly set loc
update_following()
return ..()
return ..()
/mob/dead/observer/verb/jumptomob(target in getmobs()) //Moves the ghost instead of just changing the ghosts's eye -Nodrak
set category = "Ghost"
@@ -509,7 +505,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
src << "\blue Temperature: [round(environment.temperature-T0C,0.1)]&deg;C"
src << "\blue Heat Capacity: [round(environment.heat_capacity(),0.1)]"
/mob/dead/observer/verb/view_manifest()
set name = "View Crew Manifest"
set category = "Ghost"
@@ -629,9 +625,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
client.images |= ghost_darkness_images
if (ghostimage)
client.images -= ghostimage //remove ourself
/mob/proc/can_admin_interact()
return 0
/mob/dead/observer/can_admin_interact()
return check_rights(R_ADMIN, 0, src)
@@ -44,7 +44,7 @@ var/const/MAX_ACTIVE_TIME = 400
Attach(M)
/obj/item/clothing/mask/facehugger/examine(mob/user)
..()
..(user)
if(!real)//So that giant red text about probisci doesn't show up.
return
switch(stat)
@@ -171,7 +171,7 @@ var/const/MAX_ACTIVE_TIME = 400
var/mob/living/carbon/human/H = target
if(!H.check_has_mouth())
return
if(!sterile)
//target.contract_disease(new /datum/disease/alien_embryo(0)) //so infection chance is same as virus infection chance
target.visible_message("<span class='danger'>[src] falls limp after violating [target]'s face!</span>", \
@@ -130,12 +130,8 @@
ghost_volunteers.Add(O)
/obj/item/device/mmi/posibrain/examine()
set src in oview()
if(!usr || !src) return
if( (usr.sdisabilities & BLIND || usr.blinded || usr.stat) && !istype(usr,/mob/dead/observer) )
usr << "<span class='notice'>Something is there but you can't see it.</span>"
/obj/item/device/mmi/posibrain/examine(mob/user)
if(!..(user))
return
var/msg = "<span class='info'>*---------*\nThis is \icon[src] \a <EM>[src]</EM>!\n[desc]\n"
@@ -150,8 +146,7 @@
else
msg += "<span class='deadsay'>It appears to be completely inactive.</span>\n"
msg += "<span class='info'>*---------*</span>"
usr << msg
return
user << msg
/obj/item/device/mmi/posibrain/emp_act(severity)
if(!src.brainmob)
+15 -22
View File
@@ -1,11 +1,4 @@
/mob/living/carbon/human/examine()
set src in view()
if(!usr || !src) return
if( usr.sdisabilities & BLIND || usr.blinded || usr.stat==UNCONSCIOUS )
usr << "<span class='notice'>Something is there but you can't see it.</span>"
return
/mob/living/carbon/human/examine(mob/user)
var/skipgloves = 0
var/skipsuitstorage = 0
var/skipjumpsuit = 0
@@ -182,7 +175,7 @@
else if(istype(wear_id, /obj/item/weapon/card/id)) //just in case something other than a PDA/ID card somehow gets in the ID slot :[
var/obj/item/weapon/card/id/idcard = wear_id
id = idcard.registered_name
if(id && (id != real_name) && (get_dist(src, usr) <= 1) && prob(10))
if(id && (id != real_name) && (get_dist(src, user) <= 1) && prob(10))
msg += "<span class='warning'>[t_He] [t_is] wearing \icon[wear_id] \a [wear_id] yet something doesn't seem right...</span>\n"
else*/
msg += "[t_He] [t_is] wearing \icon[wear_id] \a [wear_id].\n"
@@ -208,22 +201,22 @@
if(DWARF in mutations)
msg += "[t_He] [t_is] a halfling!\n"
var/distance = get_dist(usr,src)
if(istype(usr, /mob/dead/observer) || usr.stat == 2) // ghosts can see anything
var/distance = get_dist(user,src)
if(istype(user, /mob/dead/observer) || user.stat == 2) // ghosts can see anything
distance = 1
if (src.stat)
msg += "<span class='warning'>[t_He] [t_is]n't responding to anything around [t_him] and seems to be asleep.</span>\n"
if((stat == 2 || src.health <= config.health_threshold_crit) && distance <= 3)
msg += "<span class='warning'>[t_He] does not appear to be breathing.</span>\n"
if(istype(usr, /mob/living/carbon/human) && !usr.stat && distance <= 1)
for(var/mob/O in viewers(usr.loc, null))
O.show_message("[usr] checks [src]'s pulse.", 1)
if(istype(user, /mob/living/carbon/human) && !user.stat && distance <= 1)
for(var/mob/O in viewers(user.loc, null))
O.show_message("[user] checks [src]'s pulse.", 1)
spawn(15)
if(distance <= 1 && usr.stat != 1)
if(distance <= 1 && user.stat != 1)
if(pulse == PULSE_NONE)
usr << "<span class='deadsay'>[t_He] has no pulse[src.client ? "" : " and [t_his] soul has departed"]...</span>"
user << "<span class='deadsay'>[t_He] has no pulse[src.client ? "" : " and [t_his] soul has departed"]...</span>"
else
usr << "<span class='deadsay'>[t_He] has a pulse!</span>"
user << "<span class='deadsay'>[t_He] has a pulse!</span>"
msg += "<span class='warning'>"
if(fire_stacks > 0)
@@ -246,7 +239,7 @@
if(nutrition < 100)
msg += "[t_He] [t_is] severely malnourished.\n"
else if(nutrition >= 500)
if(usr.nutrition < 100)
if(user.nutrition < 100)
msg += "[t_He] [t_is] plump and delicious looking - Like a fat little piggy. A tasty piggy.\n"
else
msg += "[t_He] [t_is] quite chubby.\n"
@@ -419,7 +412,7 @@
msg += "<span class='warning'><b>[src] has \a [implant] sticking out of [t_his] flesh!</span>\n"
if(digitalcamo)
msg += "[t_He] [t_is] repulsively uncanny!\n"
if(!wear_mask && is_thrall(src) && in_range(usr,src))
if(!wear_mask && is_thrall(src) && in_range(user,src))
msg += "Their features seem unnaturally tight and drawn.\n"
if(decaylevel == 1)
msg += "[t_He] [t_is] starting to smell.\n"
@@ -430,7 +423,7 @@
if(decaylevel == 4)
msg += "[t_He] [t_is] mostly dessicated now, with only bones remaining of what used to be a person.\n"
if(hasHUD(usr,"security"))
if(hasHUD(user,"security"))
var/perpname = "wot"
var/criminal = "None"
@@ -453,7 +446,7 @@
msg += "<span class = 'deptradio'>Criminal status:</span> <a href='?src=\ref[src];criminal=1'>\[[criminal]\]</a>\n"
msg += "<span class = 'deptradio'>Security records:</span> <a href='?src=\ref[src];secrecord=`'>\[View\]</a> <a href='?src=\ref[src];secrecordadd=`'>\[Add comment\]</a>\n"
if(hasHUD(usr,"medical"))
if(hasHUD(user,"medical"))
var/perpname = "wot"
var/medical = "None"
@@ -484,7 +477,7 @@
pose = addtext(pose,".") //Makes sure all emotes end with a period.
msg += "\n[t_He] is [pose]"
usr << msg
user << msg
//Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records.
/proc/hasHUD(mob/M as mob, hudtype)
@@ -1059,11 +1059,11 @@
if (href_list["lookitem"])
var/obj/item/I = locate(href_list["lookitem"])
I.examine()
src.examinate(I)
if (href_list["lookmob"])
var/mob/M = locate(href_list["lookmob"])
M.examine()
src.examinate(M)
..()
return
@@ -1,12 +1,6 @@
/mob/living/carbon/slime/examine()
set src in oview()
if(!usr || !src) return
if( (usr.sdisabilities & BLIND || usr.blinded || usr.stat) && !istype(usr,/mob/dead/observer) )
usr << "<span class='notice'>Something is there but you can't see it.</span>"
return
var/msg = "<span class='info'>*---------*\nThis is \icon[src] \a <EM>[src]</EM>!\n"
/mob/living/carbon/slime/examine(mob/user)
..(user)
var/msg = ""
if (src.stat == DEAD)
msg += "<span class='deadsay'>It is limp and unresponsive.</span>\n"
else
@@ -47,5 +41,4 @@
msg += "</span>"
msg += "*---------*</span>"
usr << msg
return
user << msg
+5 -11
View File
@@ -1,12 +1,8 @@
/mob/living/silicon/ai/examine()
set src in oview()
if(!usr || !src) return
if( (usr.sdisabilities & BLIND || usr.blinded || usr.stat) && !istype(usr,/mob/dead/observer) )
usr << "<span class='notice'>Something is there but you can't see it.</span>"
/mob/living/silicon/ai/examine(mob/user)
if(!..(user))
return
var/msg = "<span class='info'>*---------*\nThis is \icon[src] <EM>[src]</EM>!\n"
var/msg = ""
if (src.stat == DEAD)
msg += "<span class='deadsay'>It appears to be powered-down.</span>\n"
else
@@ -27,10 +23,9 @@
msg += "</span>"
msg += "*---------*</span>"
usr << msg
usr.showLaws(src)
user << msg
user.showLaws(src)
return
/mob/proc/showLaws(var/mob/living/silicon/S)
return
@@ -38,4 +33,3 @@
/mob/dead/observer/showLaws(var/mob/living/silicon/S)
if(antagHUD || check_rights(R_MOD, 0, src))
S.laws.show_laws(src)
@@ -36,7 +36,7 @@
return 0
// Hide popout menu verbs
/mob/aiEye/examine(atom/A as mob|obj|turf in view())
/mob/aiEye/examinate(atom/A as mob|obj|turf in view())
set popup_menu = 0
set src = usr.contents
return 0
@@ -1,8 +1,7 @@
/mob/living/silicon/pai/examine() //removed as it was pointless...moved to the pai-card instead.
/* This is totally pointless because this mob is contained inside a card!
set src in oview()
/mob/living/silicon/pai/examine(mob/user) //removed as it was pointless...moved to the pai-card instead.
/*..(user) //This is totally pointless because this mob is contained inside a card!
var/msg = "<span class='info'>*---------*\nThis is \icon[src] \a <EM>[src]</EM>!\n"
var/msg = ""
if (src.stat == DEAD)
msg += "<span class='deadsay'>It appears to be offline.</span>\n"
else
@@ -22,6 +21,5 @@
msg += "</span>"
msg += "*---------*</span>"
usr << msg
*/
return
user << msg
*/
+4 -10
View File
@@ -496,16 +496,10 @@
src << "<span class='warning'>You are far too small to pull anything!</span>"
return
/mob/living/silicon/pai/examine()
/mob/living/silicon/pai/examine(mob/user)
..(user)
set src in oview()
if(!usr || !src) return
if( (usr.sdisabilities & BLIND || usr.blinded || usr.stat) && !istype(usr,/mob/dead/observer) )
usr << "<span class='notice'>Something is there but you can't see it.</span>"
return
var/msg = "<span class='info'>*---------*\nThis is \icon[src][name], a personal AI!"
var/msg = ""
switch(src.stat)
if(CONSCIOUS)
@@ -521,7 +515,7 @@
pose = addtext(pose,".") //Makes sure all emotes end with a period.
msg += "\nIt is [pose]"
usr << msg
user << msg
/mob/living/silicon/pai/bullet_act(var/obj/item/projectile/Proj)
..(Proj)
@@ -45,10 +45,10 @@
if(drone_progress >= 100)
visible_message("\The [src] voices a strident beep, indicating a drone chassis is prepared.")
/obj/machinery/drone_fabricator/examine()
..()
if(produce_drones && drone_progress >= 100 && istype(usr,/mob/dead) && config.allow_drone_spawn && count_drones() < config.max_maint_drones)
usr << "<BR><B>A drone is prepared. Select 'Join As Drone' from the Ghost tab to spawn as a maintenance drone.</B>"
/obj/machinery/drone_fabricator/examine(mob/user)
..(user)
if(produce_drones && drone_progress >= 100 && istype(user,/mob/dead) && config.allow_drone_spawn && count_drones() < config.max_maint_drones)
user << "<BR><B>A drone is prepared. Select 'Join As Drone' from the Ghost tab to spawn as a maintenance drone.</B>"
/obj/machinery/drone_fabricator/proc/count_drones()
var/drones = 0
@@ -101,7 +101,7 @@
if(!ticker || ticker.current_state < 3)
src << "<span class='warning'>You can't join as a drone before the game starts!</span>"
return
var/drone_age = 14 // 14 days to play as a drone
var/player_age_check = check_client_age(usr.client, drone_age)
if(player_age_check && config.use_age_restriction_for_antags)
@@ -128,7 +128,7 @@
pluralcheck = " [deathtimeminutes] minutes and"
var/deathtimeseconds = round((deathtime - deathtimeminutes * 600) / 10,1)
if (deathtime < 6000 && joinedasobserver == 0)
if (deathtime < 6000 && joinedasobserver == 0)
usr << "You have been dead for[pluralcheck] [deathtimeseconds] seconds."
usr << "<span class='warning'>You must wait 10 minutes to respawn as a drone!</span>"
return
@@ -1,12 +1,7 @@
/mob/living/silicon/robot/examine()
set src in oview()
/mob/living/silicon/robot/examine(mob/user)
..(user)
if(!usr || !src) return
if( (usr.sdisabilities & BLIND || usr.blinded || usr.stat) && !istype(usr,/mob/dead/observer) )
usr << "<span class='notice'>Something is there but you can't see it.</span>"
return
var/msg = "<span class='info'>*---------*\nThis is \icon[src] \a <EM>[src]</EM>[custom_name ? ", [modtype] [braintype]" : ""]!\n"
var/msg = ""
var/obj/act_module = get_active_hand()
if(act_module)
msg += "It is holding \icon[act_module] \a [act_module].\n"
@@ -49,6 +44,5 @@
pose = addtext(pose,".") //Makes sure all emotes end with a period.
msg += "\nIt is [pose]"
usr << msg
usr.showLaws(src)
return
user << msg
user.showLaws(src)
@@ -46,10 +46,10 @@
qdel(src)
return
/mob/living/simple_animal/construct/examine()
set src in oview()
/mob/living/simple_animal/construct/examine(mob/user)
..(user)
var/msg = "<span cass='info'>*---------*\nThis is \icon[src] \a <EM>[src]</EM>!\n"
var/msg = ""
if (src.health < src.maxHealth)
msg += "<span class='warning'>"
if (src.health >= src.maxHealth/2)
@@ -59,8 +59,7 @@
msg += "</span>"
msg += "*---------*</span>"
usr << msg
return
user << msg
/mob/living/simple_animal/construct/attack_animal(mob/living/simple_animal/M as mob)
if(istype(M, /mob/living/simple_animal/construct/builder))
@@ -281,7 +281,7 @@
src << "\red There is nothing of interest to take."
return 0
/mob/living/simple_animal/spiderbot/examine()
..()
/mob/living/simple_animal/spiderbot/examine(mob/user)
..(user)
if(src.held_item)
usr << "It is carrying \a [src.held_item] \icon[src.held_item]."
user << "It is carrying \a [src.held_item] \icon[src.held_item]."
@@ -33,12 +33,12 @@
var/image/cap_living = null //Where we store our cap icons so we dont generate them constantly to update our icon
var/image/cap_dead = null
/mob/living/simple_animal/hostile/mushroom/examine()
..()
/mob/living/simple_animal/hostile/mushroom/examine(mob/user)
..(user)
if(health >= maxHealth)
usr << "<span class='info'>It looks healthy.</span>"
user << "<span class='info'>It looks healthy.</span>"
else
usr << "<span class='info'>It looks like it's been roughed up.</span>"
user << "<span class='info'>It looks like it's been roughed up.</span>"
/mob/living/simple_animal/hostile/mushroom/Life()
..()
@@ -354,7 +354,7 @@
qdel(src)
/obj/item/weapon/ectoplasm/revenant/examine(mob/user)
..()
..(user)
if(reforming)
user << "<span class='warning'>It is shifting and distorted. It would be wise to destroy this.</span>"
else if(!reforming)
+15 -2
View File
@@ -482,6 +482,18 @@ var/list/slot_equipment_priority = list( \
onclose(user, "mob\ref[src]")
return
//mob verbs are faster than object verbs. See http://www.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine()
/mob/verb/examinate(atom/A as mob|obj|turf in view())
set name = "Examine"
set category = "IC"
if((is_blind(src) || usr.stat) && !isobserver(src))
src << "<span class='notice'>Something is there but you can't see it.</span>"
return 1
face_atom(A)
A.examine(src)
/mob/proc/ret_grab(obj/effect/list_container/mobl/L as obj, flag)
if ((!( istype(l_hand, /obj/item/weapon/grab) ) && !( istype(r_hand, /obj/item/weapon/grab) )))
if (!( L ))
@@ -620,7 +632,7 @@ var/list/slot_equipment_priority = list( \
if (!abandon_allowed)
usr << "<span class='warning'>Respawning is disabled.</span>"
return
if (stat != DEAD || !ticker)
usr << "<span class='boldnotice'>You must be dead to use this!</span>"
return
@@ -633,7 +645,7 @@ var/list/slot_equipment_priority = list( \
log_game("[key_name(usr)] respawn failed due to disconnect.")
return
client.screen.Cut()
if(!client)
log_game("[key_name(usr)] respawn failed due to disconnect.")
return
@@ -793,6 +805,7 @@ var/list/slot_equipment_priority = list( \
return
if (AM.anchored)
usr << "<span class='notice'>It won't budge!</span>"
return
var/mob/M = AM
+7
View File
@@ -458,6 +458,13 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM)
resting = !resting
src << "\blue You are now [resting ? "resting" : "getting up"]"
/proc/is_blind(A)
if(iscarbon(A))
var/mob/living/carbon/C = A
if(C.sdisabilities & BLIND || C.blinded)
return 1
return 0
/proc/get_multitool(mob/user as mob)
// Get tool
var/obj/item/device/multitool/P
+8 -9
View File
@@ -52,12 +52,11 @@
return
icon_state = "paper"
/obj/item/weapon/paper/examine()
if(in_range(usr, src) || istype(usr, /mob/dead/observer))
show_content(usr)
/obj/item/weapon/paper/examine(mob/user)
if(in_range(user, src) || istype(user, /mob/dead/observer))
show_content(user)
else
usr << "<span class='notice'>You have to go closer if you want to read it.</span>"
return
user << "<span class='notice'>You have to go closer if you want to read it.</span>"
/obj/item/weapon/paper/proc/show_content(var/mob/user, var/forceshow = 0, var/forcestars = 0, var/infolinks = 0, var/view = 1)
set src in oview(1)
@@ -95,7 +94,7 @@
return
/obj/item/weapon/paper/attack_self(mob/living/user as mob)
src.examine(user)
user.examinate(src)
if(rigged && (holiday_master.holidays && holiday_master.holidays[APRIL_FOOLS]))
if(spam_flag == 0)
spam_flag = 1
@@ -120,7 +119,7 @@
if(user.zone_sel.selecting == "eyes")
user.visible_message("<span class='notice'>You show the paper to [M]. </span>", \
"<span class='notice'> [user] holds up a paper and shows it to [M]. </span>")
src.examine(user)
M.examinate(src)
else if(user.zone_sel.selecting == "mouth")
if(!istype(M, /mob)) return
@@ -444,7 +443,7 @@
add_fingerprint(user)
return
/obj/item/weapon/paper/proc/stamp(var/obj/item/weapon/stamp/S)
stamps += (!stamps || stamps == "" ? "<HR>" : "") + "<img src=large_[S.icon_state].png>"
@@ -460,7 +459,7 @@
offset_y += y
stampoverlay.pixel_x = x
stampoverlay.pixel_y = y
if(!ico)
ico = new
ico += "paper_[S.icon_state]"
+3 -4
View File
@@ -97,11 +97,10 @@
user << "\red You must hold \the [P] steady to burn \the [src]."
/obj/item/weapon/paper_bundle/examine(mob/user)
if(in_range(usr, src) || istype(usr, /mob/dead/observer))
src.show_content(usr)
if(..(user, 1))
src.show_content(user)
else
usr << "<span class='notice'>It is too far away.</span>"
return
user << "<span class='notice'>It is too far away.</span>"
/obj/item/weapon/paper_bundle/proc/show_content(mob/user as mob)
var/dat
+6 -8
View File
@@ -94,14 +94,12 @@
amount++
/obj/item/weapon/paper_bin/examine()
set src in oview(1)
if(amount)
usr << "<span class='notice'>There " + (amount > 1 ? "are [amount] papers" : "is one paper") + " in the bin.</span>"
else
usr << "<span class='notice'>There are no papers in the bin.</span>"
return
/obj/item/weapon/paper_bin/examine(mob/user)
if(..(user, 1))
if(amount)
usr << "<span class='notice'>There " + (amount > 1 ? "are [amount] papers" : "is one paper") + " in the bin.</span>"
else
usr << "<span class='notice'>There are no papers in the bin.</span>"
/obj/item/weapon/paper_bin/update_icon()
+7 -8
View File
@@ -33,7 +33,7 @@
var/photo_size = 3
/obj/item/weapon/photo/attack_self(mob/user as mob)
src.examine(user)
user.examinate(src)
/obj/item/weapon/photo/attackby(obj/item/weapon/P as obj, mob/user as mob, params)
if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon))
@@ -70,10 +70,10 @@
user << "\red You must hold \the [P] steady to burn \the [src]."
/obj/item/weapon/photo/examine(mob/user)
if(in_range(usr, src) || istype(usr, /mob/dead/observer))
show(usr)
if(..(user, 1))
show(user)
else
usr << "<span class='notice'>It is too far away.</span>"
user << "<span class='notice'>It is too far away.</span>"
/obj/item/weapon/photo/proc/show(mob/user as mob)
usr << browse_rsc(img, "tmp_photo.png")
@@ -472,10 +472,9 @@
camera.c_tag = user.name
user << "You switch the camera [on ? "on" : "off"]."
/obj/item/device/videocam/examine()
..()
if(get_dist(usr,src) <= 1)
usr << "This video camera can send live feeds to the entertainment network. It's [camera ? "" : "in"]active."
/obj/item/device/videocam/examine(mob/user)
if(..(user, 1))
user << "This video camera can send live feeds to the entertainment network. It's [camera ? "" : "in"]active."
/obj/item/device/videocam/hear_talk(mob/M as mob, msg)
+3 -4
View File
@@ -67,10 +67,9 @@
return
/obj/item/weapon/fuel/examine()
set src in view(1)
if(usr && !usr.stat)
usr << "A magnetic storage ring, it contains [fuel]kg of [content ? content : "nothing"]."
/obj/item/weapon/fuel/examine(mob/user)
if(..(user, 1))
user << "A magnetic storage ring, it contains [fuel]kg of [content ? content : "nothing"]."
/obj/item/weapon/fuel/proc/injest(mob/M as mob)
switch(content)
+10 -13
View File
@@ -196,31 +196,28 @@
spawn(5)
src.update()
/obj/machinery/power/apc/examine()
set src in oview(1)
if(usr /*&& !usr.stat*/)
..()
/obj/machinery/power/apc/examine(mob/user)
if(..(user, 1))
if(stat & BROKEN)
usr << "Looks broken."
user << "Looks broken."
return
if(opened)
if(has_electronics && terminal)
usr << "The cover is [opened==2?"removed":"open"] and the power cell is [ cell ? "installed" : "missing"]."
user << "The cover is [opened==2?"removed":"open"] and the power cell is [ cell ? "installed" : "missing"]."
else if (!has_electronics && terminal)
usr << "There are some wires but no any electronics."
user << "There are some wires but no any electronics."
else if (has_electronics && !terminal)
usr << "Electronics installed but not wired."
user << "Electronics installed but not wired."
else /* if (!has_electronics && !terminal) */
usr << "There is no electronics nor connected wires."
user << "There is no electronics nor connected wires."
else
if (stat & MAINT)
usr << "The cover is closed. Something wrong with it: it doesn't work."
user << "The cover is closed. Something wrong with it: it doesn't work."
else if (malfhack)
usr << "The cover is broken. It may be hard to force it open."
user << "The cover is broken. It may be hard to force it open."
else
usr << "The cover is closed."
user << "The cover is closed."
// update the APC icon to show the three base states
// also add overlays for indicator lights
+6 -5
View File
@@ -541,15 +541,16 @@ obj/structure/cable/proc/cableColor(var/colorC)
else
w_class = 2.0
/obj/item/stack/cable_coil/examine()
set src in view(1)
/obj/item/stack/cable_coil/examine(mob/user)
if(!..(user, 1))
return
if(get_amount() == 1)
usr << "A short piece of power cable."
user << "A short piece of power cable."
else if(get_amount() == 2)
usr << "A piece of power cable."
user << "A piece of power cable."
else
usr << "A coil of power cable. There are [get_amount()] lengths of cable in the coil."
user << "A coil of power cable. There are [get_amount()] lengths of cable in the coil."
/obj/item/stack/cable_coil/verb/make_restraint()
+5 -6
View File
@@ -55,15 +55,14 @@
return power_used
/obj/item/weapon/stock_parts/cell/examine()
set src in view(1)
if(usr /*&& !usr.stat*/)
/obj/item/weapon/stock_parts/cell/examine(mob/user)
if(..(user, 1))
if(maxcharge <= 2500)
usr << "[desc]\nThe manufacturer's label states this cell has a power rating of [maxcharge], and that you should not swallow it.\nThe charge meter reads [round(src.percent() )]%."
user << "[desc]\nThe manufacturer's label states this cell has a power rating of [maxcharge], and that you should not swallow it.\nThe charge meter reads [round(src.percent() )]%."
else
usr << "This power cell has an exciting chrome finish, as it is an uber-capacity cell type! It has a power rating of [maxcharge]!\nThe charge meter reads [round(src.percent() )]%."
user << "This power cell has an exciting chrome finish, as it is an uber-capacity cell type! It has a power rating of [maxcharge]!\nThe charge meter reads [round(src.percent() )]%."
if(crit_fail)
usr << "\red This power cell seems to be faulty."
user << "\red This power cell seems to be faulty."
/obj/item/weapon/stock_parts/cell/attack_self(mob/user as mob)
src.add_fingerprint(user)
+15 -21
View File
@@ -26,20 +26,15 @@
if (fixture_type == "bulb")
icon_state = "bulb-construct-stage1"
/obj/machinery/light_construct/examine()
set src in view()
..()
if (!(usr in view(2))) return
switch(src.stage)
if(1)
usr << "It's an empty frame."
return
if(2)
usr << "It's wired."
return
if(3)
usr << "The casing is closed."
return
/obj/machinery/light_construct/examine(mob/user)
if(..(user, 2))
switch(src.stage)
if(1)
usr << "It's an empty frame."
if(2)
usr << "It's wired."
if(3)
usr << "The casing is closed."
/obj/machinery/light_construct/attackby(obj/item/weapon/W as obj, mob/living/user as mob, params)
src.add_fingerprint(user)
@@ -268,18 +263,17 @@
update()
// examine verb
/obj/machinery/light/examine()
set src in oview(1)
if(usr && !usr.stat)
/obj/machinery/light/examine(mob/user)
if(..(user, 1))
switch(status)
if(LIGHT_OK)
usr << "[desc] It is turned [on? "on" : "off"]."
user << "[desc] It is turned [on? "on" : "off"]."
if(LIGHT_EMPTY)
usr << "[desc] The [fitting] has been removed."
user << "[desc] The [fitting] has been removed."
if(LIGHT_BURNED)
usr << "[desc] The [fitting] is burnt out."
user << "[desc] The [fitting] is burnt out."
if(LIGHT_BROKEN)
usr << "[desc] The [fitting] has been smashed."
user << "[desc] The [fitting] has been smashed."
@@ -114,7 +114,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
src.dir = turn(src.dir, 90)
return 1
/obj/structure/particle_accelerator/examine()
/obj/structure/particle_accelerator/examine(mob/user)
switch(src.construction_state)
if(0)
src.desc = text("A [name], looks like it's not attached to the flooring")
@@ -126,8 +126,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
src.desc = text("The [name] is assembled")
if(powered)
src.desc = src.desc_holder
..()
return
..(user)
/obj/structure/particle_accelerator/attackby(obj/item/W, mob/user, params)
if(istool(W))
@@ -311,21 +310,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
/obj/machinery/particle_accelerator/update_icon()
return
/obj/machinery/particle_accelerator/examine()
switch(src.construction_state)
if(0)
src.desc = text("A [name], looks like it's not attached to the flooring")
if(1)
src.desc = text("A [name], it is missing some cables")
if(2)
src.desc = text("A [name], the panel is open")
if(3)
src.desc = text("The [name] is assembled")
if(powered)
src.desc = src.desc_holder
..()
return
/obj/machinery/particle_accelerator/attackby(obj/item/W, mob/user, params)
if(istool(W))
if(src.process_tool_hit(W,user))
+4 -4
View File
@@ -21,12 +21,12 @@
icon_state_off = "switch-up"
/obj/structure/powerswitch/examine()
..()
/obj/structure/powerswitch/examine(mob/user)
..(user)
if(on)
usr << "The switch is in the on position"
user << "The switch is in the on position"
else
usr << "The switch is in the off position"
user << "The switch is in the off position"
/obj/structure/powerswitch/attack_ai(mob/user)
user << "\red You're an AI. This is a manual switch. It's not going to work."
+3 -3
View File
@@ -31,9 +31,9 @@
last_regen = world.time
update_icon()
/obj/item/weapon/gun/launcher/spikethrower/examine()
..()
usr << "It has [spikes] [spikes == 1 ? "spike" : "spikes"] remaining."
/obj/item/weapon/gun/launcher/spikethrower/examine(mob/user)
..(user)
user << "It has [spikes] [spikes == 1 ? "spike" : "spikes"] remaining."
/obj/item/weapon/gun/launcher/spikethrower/update_icon()
icon_state = "spikethrower[spikes]"
+4 -5
View File
@@ -76,8 +76,7 @@
..()
return
examine()
set src in view(1)
..()
if(!power_supply)
usr <<"<span class='warning'>The weapon does not have a power source installed.</span>" */
examine(mob/user)
if(..(user, 1))
if(!power_supply)
usr <<"<span class='warning'>The weapon does not have a power source installed.</span>" */
@@ -313,7 +313,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
can_charge = 0
/obj/item/weapon/gun/energy/plasmacutter/examine(mob/user)
..()
..(user)
if(power_supply)
user <<"<span class='notice'>[src] is [round(power_supply.percent())]% charged.</span>"
+3 -4
View File
@@ -25,10 +25,9 @@
max_charges = Ceiling(max_charges / 2)
..()
/obj/item/weapon/gun/magic/wand/examine()
..()
usr << "Has [charges] charge\s remaining."
return
/obj/item/weapon/gun/magic/wand/examine(mob/user)
..(user)
user << "Has [charges] charge\s remaining."
/obj/item/weapon/gun/magic/wand/attack_self(mob/living/user as mob)
if(charges)
+3 -4
View File
@@ -126,10 +126,9 @@
update_icon()
return
/obj/item/weapon/gun/projectile/examine()
..()
usr << "Has [get_ammo()] round\s remaining."
return
/obj/item/weapon/gun/projectile/examine(mob/user)
..(user)
user << "Has [get_ammo()] round\s remaining."
/obj/item/weapon/gun/projectile/proc/get_ammo(var/countchambered = 1)
var/boolets = 0 //mature var names for mature people
@@ -246,14 +246,14 @@
/obj/item/weapon/crossbowframe/update_icon()
icon_state = "crossbowframe[buildstate]"
/obj/item/weapon/crossbowframe/examine()
..()
/obj/item/weapon/crossbowframe/examine(mob/user)
..(user)
switch(buildstate)
if(1) usr << "It has a loose rod frame in place."
if(2) usr << "It has a steel backbone welded in place."
if(3) usr << "It has a steel backbone and a cell mount installed."
if(4) usr << "It has a steel backbone, plastic lath and a cell mount installed."
if(5) usr << "It has a steel cable loosely strung across the lath."
if(1) user << "It has a loose rod frame in place."
if(2) user << "It has a steel backbone welded in place."
if(3) user << "It has a steel backbone and a cell mount installed."
if(4) user << "It has a steel backbone, plastic lath and a cell mount installed."
if(5) user << "It has a steel cable loosely strung across the lath."
/obj/item/weapon/crossbowframe/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W,/obj/item/stack/rods))
@@ -96,15 +96,13 @@
in_chamber = contents[1]
return !isnull(in_chamber)
/obj/item/weapon/gun/launcher/pneumatic/examine()
set src in view()
..()
if (!(usr in view(2)) && usr!=src.loc) return
usr << "The valve is dialed to [pressure_setting]%."
if(tank)
usr << "The tank dial reads [tank.air_contents.return_pressure()] kPa."
else
usr << "Nothing is attached to the tank valve!"
/obj/item/weapon/gun/launcher/pneumatic/examine(mob/user)
if(..(user, 2))
user << "The valve is dialed to [pressure_setting]%."
if(tank)
user << "The tank dial reads [tank.air_contents.return_pressure()] kPa."
else
user << "Nothing is attached to the tank valve!"
/obj/item/weapon/gun/launcher/pneumatic/special_check(user)
@@ -145,14 +143,14 @@
/obj/item/weapon/cannonframe/update_icon()
icon_state = "pneumatic[buildstate]"
/obj/item/weapon/cannonframe/examine()
..()
/obj/item/weapon/cannonframe/examine(mob/user)
..(user)
switch(buildstate)
if(1) usr << "It has a pipe segment installed."
if(2) usr << "It has a pipe segment welded in place."
if(3) usr << "It has an outer chassis installed."
if(4) usr << "It has an outer chassis welded in place."
if(5) usr << "It has a transfer valve installed."
if(1) user << "It has a pipe segment installed."
if(2) user << "It has a pipe segment welded in place."
if(3) user << "It has an outer chassis installed."
if(4) user << "It has an outer chassis welded in place."
if(5) user << "It has a transfer valve installed."
/obj/item/weapon/cannonframe/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W,/obj/item/pipe))
@@ -60,9 +60,9 @@
boolets += magazine.ammo_count(countempties)
return boolets
/obj/item/weapon/gun/projectile/revolver/examine()
..()
usr << "[get_ammo(0,0)] of those are live rounds."
/obj/item/weapon/gun/projectile/revolver/examine(mob/user)
..(user)
user << "[get_ammo(0,0)] of those are live rounds."
/obj/item/weapon/gun/projectile/revolver/detective
desc = "A cheap Martian knock-off of a classic law enforcement firearm. Uses .38-special rounds."
@@ -16,11 +16,9 @@
var/max_rockets = 1
var/list/rockets = new/list()
/obj/item/weapon/gun/rocketlauncher/examine()
set src in view()
..()
if (!(usr in view(2)) && usr!=src.loc) return
usr << "\blue [rockets.len] / [max_rockets] rockets."
/obj/item/weapon/gun/rocketlauncher/examine(mob/user)
if(..(user, 2))
user << "\blue [rockets.len] / [max_rockets] rockets."
/obj/item/weapon/gun/rocketlauncher/attackby(obj/item/I as obj, mob/user as mob, params)
if(istype(I, /obj/item/ammo_casing/rocket))
@@ -69,10 +69,10 @@
var/obj/item/ammo_casing/AC = magazine.get_round() //load next casing.
chambered = AC
/obj/item/weapon/gun/projectile/shotgun/examine()
..()
/obj/item/weapon/gun/projectile/shotgun/examine(mob/user)
..(user)
if (chambered)
usr << "A [chambered.BB ? "live" : "spent"] one is in the chamber."
user << "A [chambered.BB ? "live" : "spent"] one is in the chamber."
// COMBAT SHOTGUN //
@@ -130,7 +130,7 @@
. = ..()
/obj/item/weapon/gun/projectile/shotgun/boltaction/examine(mob/user)
..()
..(user)
user << "The bolt is [bolt_open ? "open" : "closed"]."
/////////////////////////////
+8 -12
View File
@@ -57,18 +57,14 @@
cartridge = new /obj/item/weapon/dart_cartridge(src)
update_icon()
/obj/item/weapon/gun/dartgun/examine()
set src in view()
update_icon()
..()
if (!(usr in view(2)) && usr!=src.loc)
return
if (beakers.len)
usr << "\blue [src] contains:"
for(var/obj/item/weapon/reagent_containers/glass/beaker/B in beakers)
if(B.reagents && B.reagents.reagent_list.len)
for(var/datum/reagent/R in B.reagents.reagent_list)
usr << "\blue [R.volume] units of [R.name]"
/obj/item/weapon/gun/dartgun/examine(mob/user)
if(..(user, 2))
if(beakers.len)
user << "\blue [src] contains:"
for(var/obj/item/weapon/reagent_containers/glass/beaker/B in beakers)
if(B.reagents && B.reagents.reagent_list.len)
for(var/datum/reagent/R in B.reagents.reagent_list)
user << "\blue [R.volume] units of [R.name]"
/obj/item/weapon/gun/dartgun/attackby(obj/item/I as obj, mob/user as mob, params)
if(istype(I, /obj/item/weapon/dart_cartridge))
+3 -6
View File
@@ -17,12 +17,9 @@
materials = list(MAT_METAL=2000)
/obj/item/weapon/gun/grenadelauncher/examine()
set src in view()
..()
if (!(usr in view(2)) && usr!=src.loc) return
usr << "\icon [name]:"
usr << "\blue [grenades.len] / [max_grenades] [ammo_name]s."
/obj/item/weapon/gun/grenadelauncher/examine(mob/user)
if(..(user, 2))
user << "\blue [grenades.len] / [max_grenades] [ammo_name]s."
/obj/item/weapon/gun/grenadelauncher/attackby(obj/item/I as obj, mob/user as mob, params)
@@ -79,7 +79,7 @@
if(M.ckey)
msg_admin_attack("[key_name_admin(user)] injected [key_name_admin(M)] with [src.name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)])")
M.LAssailant = user
var/trans = R.trans_to(M, amount_per_transfer_from_this)
user << "<span class='notice'>[trans] units injected. [R.total_volume] units remaining.</span>"
return
@@ -95,18 +95,17 @@
user << "\blue Synthesizer is now producing '[R.name]'."
return
/obj/item/weapon/reagent_containers/borghypo/examine()
set src in view()
..()
if (!(usr in view(2)) && usr!=src.loc) return
/obj/item/weapon/reagent_containers/borghypo/examine(mob/user)
if(!..(user, 2))
return
var/empty = 1
for(var/datum/reagents/RS in reagent_list)
var/datum/reagent/R = locate() in RS.reagent_list
if(R)
usr << "\blue It currently has [R.volume] units of [R.name] stored."
user << "\blue It currently has [R.volume] units of [R.name] stored."
empty = 0
if(empty)
usr << "\blue It is currently empty. Allow some time for the internal syntheszier to produce more."
user << "\blue It is currently empty. Allow some time for the internal syntheszier to produce more."
@@ -19,15 +19,13 @@
base_name = name
examine()
set src in view()
..()
if (!(usr in view(2)) && usr!=src.loc) return
usr << "\blue It contains:"
if(reagents && reagents.reagent_list.len)
usr << "\blue [src.reagents.total_volume] units of powder."
else
usr << "\blue Nothing."
examine(mob/user)
if(..(user, 2))
user << "\blue It contains:"
if(reagents && reagents.reagent_list.len)
user << "\blue [src.reagents.total_volume] units of powder."
else
user << "\blue Nothing."
afterattack(obj/target, mob/user, proximity)
if(!proximity) return
@@ -32,20 +32,19 @@
else
return ..(target, user, proximity)
/* examine()
set src in view()
..()
if (!(usr in range(0)) && usr!=src.loc) return
/* examine(mob/user)
if(!..(user, 1))
return
if(!reagents || reagents.total_volume==0)
usr << "\blue \The [src] is empty!"
user << "\blue \The [src] is empty!"
else if (reagents.total_volume<=src.volume/4)
usr << "\blue \The [src] is almost empty!"
user << "\blue \The [src] is almost empty!"
else if (reagents.total_volume<=src.volume*0.66)
usr << "\blue \The [src] is half full!"
user << "\blue \The [src] is half full!"
else if (reagents.total_volume<=src.volume*0.90)
usr << "\blue \The [src] is almost full!"
user << "\blue \The [src] is almost full!"
else
usr << "\blue \The [src] is full!"*/
user << "\blue \The [src] is full!"*/
//DRINKS
@@ -146,20 +146,19 @@
user << "<span class='notice'>You heat [src] with [I].</span>"
src.reagents.handle_reactions()
examine()
set src in view()
..()
if (!(usr in range(0)) && usr!=src.loc) return
examine(mob/user)
if(!..(user, 1))
return
if(!reagents || reagents.total_volume==0)
usr << "\blue \The [src] is empty!"
user << "\blue \The [src] is empty!"
else if (reagents.total_volume<=src.volume/4)
usr << "\blue \The [src] is almost empty!"
user << "\blue \The [src] is almost empty!"
else if (reagents.total_volume<=src.volume*0.66)
usr << "\blue \The [src] is half full!"
user << "\blue \The [src] is half full!"
else if (reagents.total_volume<=src.volume*0.90)
usr << "\blue \The [src] is almost full!"
user << "\blue \The [src] is almost full!"
else
usr << "\blue \The [src] is full!"
user << "\blue \The [src] is full!"
////////////////////////////////////////////////////////////////////////////////
@@ -80,10 +80,10 @@
del(O)
return ..()
/obj/item/weapon/reagent_containers/food/snacks/csandwich/examine()
..()
/obj/item/weapon/reagent_containers/food/snacks/csandwich/examine(mob/user)
..(user)
var/obj/item/O = pick(contents)
usr << "\blue You think you can see [O.name] in there."
user << "\blue You think you can see [O.name] in there."
/obj/item/weapon/reagent_containers/food/snacks/csandwich/attack(mob/M as mob, mob/user as mob, def_zone)
@@ -120,18 +120,16 @@
/obj/item/weapon/reagent_containers/food/snacks/afterattack(obj/target, mob/user, proximity)
return
/obj/item/weapon/reagent_containers/food/snacks/examine()
set src in view()
..()
if (!(usr in range(0)) && usr!=src.loc) return
if (bitecount==0)
return
else if (bitecount==1)
usr << "\blue \The [src] was bitten by someone!"
else if (bitecount<=3)
usr << "\blue \The [src] was bitten [bitecount] times!"
else
usr << "\blue \The [src] was bitten multiple times!"
/obj/item/weapon/reagent_containers/food/snacks/examine(mob/user)
if(..(user, 0))
if (bitecount==0)
return
else if (bitecount==1)
user << "\blue \The [src] was bitten by someone!"
else if (bitecount<=3)
user << "\blue \The [src] was bitten [bitecount] times!"
else
user << "\blue \The [src] was bitten multiple times!"
/obj/item/weapon/reagent_containers/food/snacks/attackby(obj/item/weapon/W, mob/user, params)
@@ -46,17 +46,16 @@
..()
base_name = name
examine()
set src in view()
..()
if (!(usr in view(2)) && usr!=src.loc) return
usr << "\blue It contains:"
examine(mob/user)
if(!..(user, 2))
return
user << "\blue It contains:"
if(reagents && reagents.reagent_list.len)
usr << "\blue [src.reagents.total_volume] units of liquid."
user << "\blue [src.reagents.total_volume] units of liquid."
else
usr << "\blue Nothing."
user << "\blue Nothing."
if (!is_open_container())
usr << "\blue Airtight lid seals it completely."
user << "\blue Airtight lid seals it completely."
attack_self()
..()
@@ -100,12 +100,12 @@
else
icon_state = "[initial(icon_state)]0"
/obj/item/weapon/reagent_containers/hypospray/autoinjector/examine()
..()
/obj/item/weapon/reagent_containers/hypospray/autoinjector/examine(mob/user)
..(user)
if(reagents && reagents.reagent_list.len)
usr << "\blue It is currently loaded."
user << "\blue It is currently loaded."
else
usr << "\blue It is spent."
user << "\blue It is spent."
/obj/item/weapon/reagent_containers/hypospray/autoinjector/teporone //basilisks
name = "teporone autoinjector"
@@ -83,7 +83,6 @@
/obj/item/weapon/reagent_containers/spray/examine(mob/user)
if(..(user, 0) && user==src.loc)
user << "[round(src.reagents.total_volume)] units left."
return
/obj/item/weapon/reagent_containers/spray/verb/empty()
+9 -11
View File
@@ -23,16 +23,15 @@
src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT
..()
/obj/structure/reagent_dispensers/examine()
set src in view()
..()
if (!(usr in view(2)) && usr!=src.loc) return
usr << "\blue It contains:"
/obj/structure/reagent_dispensers/examine(mob/user)
if(!..(user, 2))
return
user << "\blue It contains:"
if(reagents && reagents.reagent_list.len)
for(var/datum/reagent/R in reagents.reagent_list)
usr << "\blue [R.volume] units of [R.name]"
user << "\blue [R.volume] units of [R.name]"
else
usr << "\blue Nothing."
user << "\blue Nothing."
/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this
set name = "Set transfer amount"
@@ -111,10 +110,9 @@
/obj/structure/reagent_dispensers/fueltank/ex_act()
explode()
/obj/structure/reagent_dispensers/fueltank/examine()
set src in view()
..()
if (!(usr in view(2)) && usr!=src.loc) return
/obj/structure/reagent_dispensers/fueltank/examine(mob/user)
if(!..(user, 2))
return
if(rig)
usr << "<span class='notice'>There is some kind of device rigged to the tank."
+3 -4
View File
@@ -28,10 +28,9 @@
qdel(S)
return 1
/obj/item/weapon/gun/syringe/examine()
..()
usr << "Can hold [max_syringes] syringe\s. Has [syringes.len] syringe\s remaining."
return
/obj/item/weapon/gun/syringe/examine(mob/user)
..(user)
user << "Can hold [max_syringes] syringe\s. Has [syringes.len] syringe\s remaining."
/obj/item/weapon/gun/syringe/attack_self(mob/living/user as mob)
if(!syringes.len)
@@ -25,15 +25,9 @@
var/num_stored_bags = 10
var/obj/item/weapon/evidencebag/filled_bag
/obj/item/device/core_sampler/examine()
set src in orange(1)
if (!( usr ))
return
if(get_dist(src, usr) < 2)
usr << "That's \a [src]."
usr << "\blue Used to extract geological core samples - this one is [sampled_turf ? "full" : "empty"], and has [num_stored_bags] bag[num_stored_bags != 1 ? "s" : ""] remaining."
else
return ..()
/obj/item/device/core_sampler/examine(mob/user)
if(..(user, 2))
user << "\blue Used to extract geological core samples - this one is [sampled_turf ? "full" : "empty"], and has [num_stored_bags] bag[num_stored_bags != 1 ? "s" : ""] remaining."
/obj/item/device/core_sampler/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W,/obj/item/weapon/evidencebag))
+2 -2
View File
@@ -20,7 +20,7 @@
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
/obj/machinery/telepad/upgraded/New()
..()
component_parts = list()
@@ -132,7 +132,7 @@
processing_objects.Add(src)
/obj/item/weapon/rcs/examine(mob/user)
..()
..(user)
user << "There are [rcharges] charge\s left."
/obj/item/weapon/rcs/Destroy()
+1 -1
View File
@@ -43,7 +43,7 @@
return ..()
/obj/machinery/computer/telescience/examine(mob/user)
..()
..(user)
user << "There are [crystals.len ? crystals.len : "no"] bluespace crystal\s in the crystal slots."
/obj/machinery/computer/telescience/initialize()
@@ -185,14 +185,9 @@
return ..()
/obj/vehicle/train/ambulance/engine/examine()
..()
if(!istype(usr, /mob/living/carbon/human))
return
if(get_dist(usr,src) <= 1)
usr << "The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition."
/obj/vehicle/train/ambulance/engine/examine(mob/user)
if(..(user, 1))
user << "The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition."
/obj/vehicle/train/ambulance/engine/verb/check_power()
set name = "Check power level"
@@ -175,15 +175,12 @@
else
return ..()
/obj/vehicle/train/cargo/engine/examine()
..()
if(!istype(usr, /mob/living/carbon/human))
/obj/vehicle/train/cargo/engine/examine(mob/user)
if(!..(user, 1))
return
if(get_dist(usr,src) <= 1)
usr << "The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition."
usr << "The charge meter reads [cell? round(cell.percent(), 0.01) : 0]%"
user << "The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition."
user << "The charge meter reads [cell? round(cell.percent(), 0.01) : 0]%"
/obj/vehicle/train/cargo/engine/verb/start_engine()
set name = "Start engine"
+7 -10
View File
@@ -235,18 +235,15 @@
return ..()
/obj/vehicle/train/janitor/engine/examine()
..()
usr << "\icon[src] This [name] contains [reagents.total_volume] unit\s of [reagents]!"
if(mybag)
usr << "\A [mybag] is hanging on the [name]."
if(!istype(usr, /mob/living/carbon/human))
/obj/vehicle/train/janitor/engine/examine(mob/user)
if(!..(user, 1))
return
if(get_dist(usr,src) <= 1)
usr << "The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition."
user << "\icon[src] This [name] contains [reagents.total_volume] unit\s of [reagents]!"
if(mybag)
user << "\A [mybag] is hanging on the [name]."
user << "The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition."
/obj/vehicle/train/janitor/engine/verb/check_power()
set name = "Check power level"
+4 -4
View File
@@ -66,11 +66,11 @@
infect_virus2(target,src.virus2)
qdel(src)
/obj/item/weapon/virusdish/examine()
usr << "This is a virus containment dish."
/obj/item/weapon/virusdish/examine(mob/user)
user << "This is a virus containment dish."
if(src.info)
usr << "It has the following information about its contents:"
usr << src.info
user << "It has the following information about its contents:"
user << src.info
/obj/item/weapon/ruinedvirusdish
name = "ruined virus sample"