diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 720dc4db4a0..4b43c992347 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -31,6 +31,9 @@ item_state = SSticker.cultdat.sword_icon ..() +/obj/item/melee/cultblade/detailed_examine() + return "This blade is a powerful weapon, capable of severing limbs easily, if they are targeted. Nonbelievers are unable to use this weapon." + /obj/item/melee/cultblade/attack(mob/living/target, mob/living/carbon/human/user) if(!iscultist(user)) user.Weaken(5) diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index 551f58594bb..bd7494ad0be 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -31,6 +31,9 @@ patient = null return ..() +/obj/machinery/optable/detailed_examine() + return "Click your target with Grab intent, then click on the table with an empty hand, to place them on it." + /obj/machinery/optable/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) if(user.a_intent == INTENT_HARM) ..(user, TRUE) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index ea7fa1f118b..57062a6e806 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -31,6 +31,18 @@ light_color = LIGHT_COLOR_CYAN +/obj/machinery/sleeper/detailed_examine() + return "The sleeper allows you to clean the blood by means of dialysis, and to administer medication in a controlled environment.
\ +
\ + 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.
\ +
\ + You can also inject common medicines directly into their bloodstream.\ +
\ + 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." + /obj/machinery/sleeper/power_change() ..() if(!(stat & (BROKEN|NOPOWER))) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 05d16c49c6c..9b16d52383c 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -11,6 +11,15 @@ var/mob/living/carbon/human/occupant var/known_implants = list(/obj/item/implant/chem, /obj/item/implant/death_alarm, /obj/item/implant/mindshield, /obj/item/implant/tracking, /obj/item/implant/health) +/obj/machinery/bodyscanner/detailed_examine() + return "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.
\ +
\ + 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/bodyscanner/Destroy() go_out() return ..() diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index c875b094058..bc004c28b1f 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -39,6 +39,9 @@ currentPatient = null return ..() +/obj/machinery/computer/operating/detailed_examine() + return "This console gives information on the status of the patient on the adjacent operating table, notably their consciousness." + /obj/machinery/computer/operating/attack_ai(mob/user) add_fingerprint(user) if(stat & (BROKEN|NOPOWER)) diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 38443de284e..ec4b5ac98b6 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -7,6 +7,10 @@ var/unwrenched = 0 var/wait = 0 +/obj/machinery/pipedispenser/detailed_examine() + return "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." + /obj/machinery/pipedispenser/attack_hand(mob/user) if(..()) return 1 diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index f9ec5cff198..c736026bca8 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -23,6 +23,10 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ usesound = 'sound/items/deconstruct.ogg' merge_type = /obj/item/stack/rods +/obj/item/stack/rods/detailed_examine() + return "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/rods/cyborg energy_type = /datum/robot_energy_storage/rods is_cyborg = TRUE diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 26af8fd9ac2..c9901c8b0fe 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -36,6 +36,9 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ merge_type = /obj/item/stack/sheet/glass point_value = 1 +/obj/item/stack/sheet/glass/detailed_examine() + return "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/fifty amount = 50 @@ -44,6 +47,10 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ is_cyborg = TRUE materials = list() +/obj/item/stack/sheet/glass/cyborg/detailed_examine() + return "Use in your hand to build a window. Can be upgraded to reinforced glass by adding metal rods, which are made from metal sheets.
\ + As a synthetic, you can acquire more sheets of glass by recharging." + /obj/item/stack/sheet/glass/New(loc, amount) recipes = GLOB.glass_recipes ..() @@ -103,6 +110,9 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ recipes = GLOB.reinforced_glass_recipes ..() +/obj/item/stack/sheet/rglass/detailed_examine() + return "Use in your hand to build a window. Reinforced glass is much stronger against damage." + GLOBAL_LIST_INIT(pglass_recipes, list ( \ new/datum/stack_recipe/window("directional window", /obj/structure/window/plasmabasic, time = 0, on_floor = TRUE, window_checks = TRUE), \ new/datum/stack_recipe/window("fulltile window", /obj/structure/window/full/plasmabasic, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \ @@ -113,6 +123,10 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \ is_cyborg = TRUE materials = list() +/obj/item/stack/sheet/rglass/cyborg/detailed_examine() + return "Use in your hand to build a window. Reinforced glass is much stronger against damage.
\ + As a synthetic, you can gain more reinforced glass by recharging." + /obj/item/stack/sheet/plasmaglass name = "plasma glass" desc = "A very strong and very resistant sheet of a plasma-glass alloy." diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index c3fefa499dd..bc0211e5871 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -114,6 +114,10 @@ GLOBAL_LIST_INIT(metal_recipes, list( is_cyborg = TRUE materials = list() +/obj/item/stack/sheet/metal/cyborg/detailed_examine() + return "Use in your hand to bring up the recipe menu. If you have enough sheets, click on something on the list to build it.
\ + You can replenish your supply of metal as a synthetic by recharging." + /obj/item/stack/sheet/metal/fifty amount = 50 diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm index 63223a4c6f4..44c9e86426d 100644 --- a/code/game/objects/items/stacks/sheets/sheets.dm +++ b/code/game/objects/items/stacks/sheets/sheets.dm @@ -16,3 +16,6 @@ usesound = 'sound/items/deconstruct.ogg' toolspeed = 1 var/wall_allowed = TRUE //determines if sheet can be used in wall construction or not. + +/obj/item/stack/sheet/detailed_examine() + return "Use in your hand to bring up the recipe menu. If you have enough sheets, click on something on the list to build it." diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm index 67c2e1f6c9d..9382d61a965 100644 --- a/code/game/objects/items/stacks/telecrystal.dm +++ b/code/game/objects/items/stacks/telecrystal.dm @@ -1,7 +1,6 @@ /obj/item/stack/telecrystal name = "telecrystal" desc = "It seems to be pulsing with suspiciously enticing energies." - description_antag = "Telecrystals can be activated by utilizing them on devices with an actively running uplink. They will not activate on unactivated uplinks." singular_name = "telecrystal" icon = 'icons/obj/telescience.dmi' icon_state = "telecrystal" @@ -34,6 +33,9 @@ use(amount) to_chat(user, "You slot [src] into [cart]. The next time it's used, it will also give telecrystals") +/obj/item/stack/telecrystal/detailed_examine_antag() + return "Telecrystals can be activated by utilizing them on devices with an actively running uplink. They will not activate on unactivated uplinks." + /obj/item/stack/telecrystal/five amount = 5 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 9cacf2e8d65..4b7ec1b350b 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1358,9 +1358,14 @@ . += "Has [fake_bullets] round\s remaining." . += "[fake_bullets] of those are live rounds." +/obj/item/toy/russian_revolver/trick_revolver/detailed_examine() //oh no + return "This is a ballistic weapon. To reload, click the weapon in your hand to unload (if needed), then add the appropriate ammo. The description \ + will tell you what caliber you need." + /obj/item/toy/russian_revolver/trick_revolver/post_shot(user) to_chat(user, "[src] did look pretty dodgey!") SEND_SOUND(user, sound('sound/misc/sadtrombone.ogg')) //HONK + /* * Rubber Chainsaw */ diff --git a/code/game/objects/items/weapons/bee_briefcase.dm b/code/game/objects/items/weapons/bee_briefcase.dm index da2d8bf3bed..c2b50e1f3f7 100644 --- a/code/game/objects/items/weapons/bee_briefcase.dm +++ b/code/game/objects/items/weapons/bee_briefcase.dm @@ -1,7 +1,6 @@ /obj/item/bee_briefcase name = "briefcase" desc = "This briefcase has easy-release clasps and smells vaguely of honey and blood..." - description_antag = "A briefcase filled with deadly bees, you should inject this with a syringe of your own blood before opening it." icon = 'icons/obj/storage.dmi' icon_state = "briefcase" item_state = "briefcase" @@ -28,6 +27,9 @@ else . += "The bees are gone... Colony collapse disorder?" +/obj/item/bee_briefcase/detailed_examine_antag() + return "A briefcase filled with deadly bees, you should inject this with a syringe of your own blood before opening it." + /obj/item/bee_briefcase/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/reagent_containers/syringe)) var/obj/item/reagent_containers/syringe/S = I diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index 5e39e85d1f0..0f30d33d7b4 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -561,7 +561,6 @@ /obj/item/nullrod/missionary_staff name = "holy staff" desc = "It has a mysterious, protective aura." - description_antag = "This seemingly standard holy staff is actually a disguised neurotransmitter capable of inducing blind zealotry in its victims. It must be allowed to recharge in the presence of a linked set of missionary robes. Activate the staff while wearing robes to link, then aim the staff at your victim to try and convert them." reskinned = TRUE reskin_selectable = FALSE icon_state = "godstaff-red" @@ -575,6 +574,10 @@ var/obj/item/clothing/suit/hooded/chaplain_hoodie/missionary_robe/robes = null //the robes linked with this staff var/faith = 99 //a conversion requires 100 faith to attempt. faith recharges over time while you are wearing missionary robes that have been linked to the staff. +/obj/item/nullrod/missionary_staff/detailed_examine_antag() + return "This seemingly standard holy staff is actually a disguised neurotransmitter capable of inducing blind zealotry in its victims. It must be allowed to recharge in the presence of a linked set of missionary robes. \ + Activate the staff while wearing robes to link, then aim the staff at your victim to try and convert them." + /obj/item/nullrod/missionary_staff/New() ..() team_color = pick("red", "blue") diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 3cc7c989ebf..1034ae3ffb4 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -125,6 +125,11 @@ if(item_color == null) item_color = pick("red", "blue", "green", "purple") +/obj/item/melee/energy/sword/detailed_examine() + return "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/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) if(active) return ..() diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 64cab3bef7a..b76b78de12d 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -71,6 +71,11 @@ else . += "The baton does not have a power source installed." +/obj/item/melee/baton/detailed_examine() + return "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/melee/baton/get_cell() return cell diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index fb145958ed7..04b29784e42 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -28,6 +28,11 @@ if(GIRDER_DISASSEMBLED) . += "[src] is disassembled! You probably shouldn't be able to see this examine message." +/obj/structre/girder/detailed_examine() + return "Use metal sheets on this to build a normal wall. Adding plasteel instead will make a reinforced wall.
\ + A false wall can be made by using a crowbar on this girder, and then adding metal or plasteel.
\ + You can dismantle the girder with a wrench." + /obj/structure/girder/proc/refundMetal(metalAmount) //refunds metal used in construction when deconstructed for(var/i=0;i < metalAmount;i++) new metal_type(get_turf(src)) @@ -405,6 +410,9 @@ girderpasschance = 0 max_integrity = 350 +/obj/structure/girder/reinforced/detailed_examine() + return "Add another sheet of plasteel to finish." + /obj/structure/girder/cult name = "runed girder" desc = "Framework made of a strange and shockingly cold metal. It doesn't seem to have any bolts." diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index b3bc69cbaea..635529d5bd7 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -21,6 +21,10 @@ var/shockcooldown = 0 var/my_shockcooldown = 1 SECONDS +/obj/structure/grille/detailed_examine() + return "A powered and knotted wire underneath this will cause the grille to shock anyone not wearing insulated gloves.
\ + Wirecutters will turn the grille into metal rods instantly. Grilles are made with metal rods." + /obj/structure/grille/fence var/width = 3 diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 785d6894215..95037046129 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -5,6 +5,9 @@ icon_state = "folded_wall" w_class = WEIGHT_CLASS_NORMAL +/obj/item/inflatable/detailed_examine() + return "Inflate by using it in your hand. The inflatable barrier will inflate on your tile. To deflate it, use the 'deflate' verb." + /obj/item/inflatable/attack_self(mob/user) playsound(loc, 'sound/items/zip.ogg', 75, 1) to_chat(user, "You inflate [src].") @@ -25,6 +28,9 @@ var/torn = /obj/item/inflatable/torn var/intact = /obj/item/inflatable +/obj/structure/inflatable/detailed_examine() + return "To remove these safely, use the 'deflate' verb. Hitting these with any objects will probably puncture and break it forever." + /obj/structure/inflatable/Initialize(location) ..() air_update_turf(TRUE) @@ -104,6 +110,10 @@ var/state = 0 //closed, 1 == open var/isSwitchingStates = 0 +/obj/structure/inflatable/door/detailed_examine() + return "Click the door to open or close it. It only stops air while closed.
\ + To remove these safely, use the 'deflate' verb. Hitting these with any objects will probably puncture and break it forever." + /obj/structure/inflatable/door/attack_ai(mob/user as mob) //those aren't machinery, they're just big fucking slabs of a mineral if(isAI(user)) //so the AI can't open it return diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 3561bd1f239..6dde2bcc132 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -26,6 +26,10 @@ . = ..() . += deconstruction_hints(user) +/obj/structure/lattice/detailed_examine() + return "Add a metal floor tile to build a floor on top of the lattice.
\ + Lattices can be made by applying metal rods to a space tile." + /obj/structure/lattice/proc/deconstruction_hints(mob/user) return "The rods look like they could be cut. There's space for more rods or a tile." diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index d91caa4244f..53b0ce8f1eb 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -25,6 +25,12 @@ buckle_offset = -6 var/comfort = 2 // default comfort +/obj/structure/bed/detailed_examine() + return "Click and drag yourself (or anyone) to this to buckle in. Click on this with an empty hand to undo the buckles.
\ +
\ + 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." + /obj/structure/bed/psych name = "psych bed" desc = "For prime comfort during psychiatric evaluations." diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 1eb89e6a238..f0cb71fe2ee 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -68,6 +68,10 @@ if(rotting) . += "There is fungus growing on [src]." +/turf/simulated/wall/detailed_examine() + return "You can deconstruct this by welding it, and then wrenching the girder.
\ + You can build a wall by using metal sheets and making a girder, then adding more metal or plasteel." + /turf/simulated/wall/proc/update_icon() if(!damage_overlays[1]) //list hasn't been populated generate_overlays() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index ae45d15a6e1..90361aca549 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -16,6 +16,10 @@ can_unwrench = 1 var/side_inverted = 0 +/obj/machinery/atmospherics/binary/circulator/detailed_examine() + return "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 electricity is being generated." + // Creating a custom circulator pipe subtype to be delivered through cargo /obj/item/pipe/circulator name = "circulator/heat exchanger fitting" diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index 2c12b3fa6a6..292a47386f2 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -14,6 +14,9 @@ var/id = null +/obj/machinery/atmospherics/binary/passive_gate/detailed_examine() + return "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." + /obj/machinery/atmospherics/binary/passive_gate/atmos_init() ..() if(frequency) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index fec536ad0c9..9ec7207fb59 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -26,6 +26,9 @@ Thus, the two variables affect pump operation are set in New(): var/id = null +/obj/machinery/atmospherics/binary/pump/detailed_examine() + return "This moves gas from one pipe to another. A higher target pressure demands more energy. The side with the red end is the output." + /obj/machinery/atmospherics/binary/pump/CtrlClick(mob/living/user) if(!istype(user) || user.incapacitated()) to_chat(user, "You can't do that right now!") diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm index 47286270a4c..5bdf085c578 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm @@ -11,6 +11,9 @@ req_one_access_txt = "24;10" +/obj/machinery/atmospherics/binary/valve/detailed_examine() + return "Click this to turn the valve. If red, the pipes on each end are separated. Otherwise, they are connected." + /obj/machinery/atmospherics/binary/valve/open open = 1 icon_state = "map_valve1" diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/tvalve.dm b/code/modules/atmospherics/machinery/components/trinary_devices/tvalve.dm index 656f80dddf5..1ad9a1095a7 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/tvalve.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/tvalve.dm @@ -12,6 +12,9 @@ var/state = TVALVE_STATE_STRAIGHT +/obj/machinery/atmospherics/trinary/tvalve/detailed_examine() + return "Click this to toggle the mode. The direction with the green light is where the gas will flow." + /obj/machinery/atmospherics/trinary/tvalve/bypass icon_state = "map_tvalve1" state = TVALVE_STATE_SIDE diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 01d18336b5c..1452ab48b2f 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -28,6 +28,23 @@ light_color = LIGHT_COLOR_WHITE +/obj/machinery/atmospherics/unary/cryo_cell/detailed_examine() + return "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.
\ +
\ + 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 is Cryoxadone, which \ + heals most damage types including genetic damage.
\ +
\ + 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.
\ +
\ + Clicking the tube with a beaker full of chemicals in hand will place it in its storage to distribute when it is activated.
\ +
\ + 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/atmospherics/unary/cryo_cell/power_change() ..() if(!(stat & (BROKEN|NOPOWER))) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index 11c032a522d..b7fe5ab85ae 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -30,6 +30,10 @@ if(id && !id_tag)//I'm not dealing with any more merge conflicts id_tag = id +/obj/machinery/atmospherics/unary/outlet_injector/detailed_examine() + return "Outputs the pipe's gas into the atmosphere, similar to an air vent. It can be controlled by a nearby atmospherics computer. \ + A green light on it means it is on." + /obj/machinery/atmospherics/unary/outlet_injector/Destroy() if(SSradio) SSradio.remove_object(src, frequency) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 2b7b18c8c25..7a3bedf9271 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -40,6 +40,11 @@ RefreshParts() update_icon() +/obj/machinery/atmospherics/unary/thermomachine/detailed_examine() + return "Cools or heats 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." + /obj/machinery/atmospherics/unary/thermomachine/proc/swap_function() cooling = !cooling if(cooling) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index d85d502c3ab..74c8be45b1b 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -47,6 +47,9 @@ connect_types = list(1,2) //connects to regular and supply pipes +/obj/machinery/atmospherics/unary/vent_pump/detailed_examine() + return "This pumps the contents of the attached pipe out into the atmosphere, if needed. It can be controlled from an Air Alarm." + /obj/machinery/atmospherics/unary/vent_pump/on on = 1 icon_state = "map_vent_out" diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 7a983e8b7cc..618dd1bc355 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -51,6 +51,10 @@ assign_uid() id_tag = num2text(uid) +/obj/machinery/atmospherics/unary/vent_scrubber/detailed_examine() + return "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." + /obj/machinery/atmospherics/unary/vent_scrubber/Destroy() if(initial_loc && frequency == ATMOS_VENTSCRUB) initial_loc.air_scrub_info -= id_tag diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index 84688b03195..a84ff7f8cdf 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -39,6 +39,9 @@ if(!target) target = locate(/obj/machinery/atmospherics/pipe) in loc +/obj/machinery/meter/detailed_examine() + return "Measures the volume and temperature of the pipe under the meter." + /obj/machinery/meter/process_atmos() if(!target) icon_state = "meterX" diff --git a/code/modules/atmospherics/machinery/pipes/cap.dm b/code/modules/atmospherics/machinery/pipes/cap.dm index 516660e72ba..615075cf3c0 100644 --- a/code/modules/atmospherics/machinery/pipes/cap.dm +++ b/code/modules/atmospherics/machinery/pipes/cap.dm @@ -16,6 +16,9 @@ ..() initialize_directions = dir +/obj/machinery/atmospherics/pipe/cap/detailed_examine() + return "This is a cosmetic attachment, as pipes currently do not spill their contents into the air." + /obj/machinery/atmospherics/pipe/cap/hide(i) if(level == 1 && istype(loc, /turf/simulated)) invisibility = i ? INVISIBILITY_MAXIMUM : 0 diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm index ab7196e0864..ffb66a01da3 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold.dm @@ -16,7 +16,6 @@ level = 1 /obj/machinery/atmospherics/pipe/manifold/New() - ..() alpha = 255 @@ -31,6 +30,9 @@ if(WEST) initialize_directions = NORTH|EAST|SOUTH +/obj/machinery/atmospherics/pipe/manifold/detailed_examine() + return "A normal pipe with three ends to connect to." + /obj/machinery/atmospherics/pipe/manifold/atmos_init() ..() for(var/D in GLOB.cardinal) @@ -168,6 +170,10 @@ icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED +/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers/detailed_examine() + return "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 name="Air supply pipe manifold" desc = "A manifold composed of supply pipes" @@ -177,6 +183,10 @@ icon_connect_type = "-supply" color = PIPE_COLOR_BLUE +/obj/machinery/atmospherics/pipe/manifold/visible/supply/detailed_examine() + return "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/visible/yellow color = PIPE_COLOR_YELLOW @@ -209,6 +219,10 @@ icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers/detailed_examine() + return "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 name="Air supply pipe manifold" desc = "A manifold composed of supply pipes" @@ -218,6 +232,10 @@ icon_connect_type = "-supply" color = PIPE_COLOR_BLUE +/obj/machinery/atmospherics/pipe/manifold/hidden/supply/detailed_examine() + return "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/yellow color = PIPE_COLOR_YELLOW diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm index 0ac16c2c69d..80d18bcee0f 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm @@ -21,6 +21,9 @@ alpha = 255 icon = null +/obj/machinery/atmospherics/pipe/manifold4w/detailed_examine() + return "This is a four-way pipe." + /obj/machinery/atmospherics/pipe/manifold4w/pipeline_expansion() return list(node1, node2, node3, node4) @@ -178,6 +181,10 @@ icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED +/obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers/detailed_examine() + return "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/visible/supply name="4-way air supply pipe manifold" desc = "A manifold composed of supply pipes" @@ -187,6 +194,10 @@ icon_connect_type = "-supply" color = PIPE_COLOR_BLUE +/obj/machinery/atmospherics/pipe/manifold4w/visible/supply/detailed_examine() + return "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/visible/yellow color = PIPE_COLOR_YELLOW @@ -213,6 +224,10 @@ icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers/detailed_examine() + return "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 name="4-way air supply pipe manifold" desc = "A manifold composed of supply pipes" @@ -222,6 +237,10 @@ icon_connect_type = "-supply" color = PIPE_COLOR_BLUE +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply/detailed_examine() + return "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/yellow color = PIPE_COLOR_YELLOW diff --git a/code/modules/atmospherics/machinery/pipes/pipe.dm b/code/modules/atmospherics/machinery/pipes/pipe.dm index 01dc0ea0bde..afda1c30db7 100644 --- a/code/modules/atmospherics/machinery/pipes/pipe.dm +++ b/code/modules/atmospherics/machinery/pipes/pipe.dm @@ -36,6 +36,12 @@ qdel(parent) parent = null +/obj/machinery/atmospherics/pipe/detailed_examine() + return "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.
\ + 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." + /obj/machinery/atmospherics/pipe/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/analyzer)) atmosanalyzer_scan(parent.air, user) diff --git a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_he.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_he.dm index 9c6b0da2121..8bd596cbf86 100644 --- a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_he.dm +++ b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_he.dm @@ -14,6 +14,9 @@ var/icon_temperature = T20C //stop small changes in temperature causing icon refresh resistance_flags = LAVA_PROOF | FIRE_PROOF +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/detailed_examine() + return "This radiates heat from the pipe's gas to space, cooling it down." + /obj/machinery/atmospherics/pipe/simple/heat_exchanging/process_atmos() var/environment_temperature = 0 var/datum/gas_mixture/pipe_air = return_air() diff --git a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_hidden.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_hidden.dm index fcfe622e483..d3fafe950c0 100644 --- a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_hidden.dm +++ b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_hidden.dm @@ -12,6 +12,10 @@ icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers/detailed_examine() + return "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/hidden/supply name = "Air supply pipe" desc = "A one meter section of supply pipe" @@ -21,12 +25,19 @@ icon_connect_type = "-supply" color = PIPE_COLOR_BLUE +/obj/machinery/atmospherics/pipe/simple/hidden/supply/detailed_examine() + return "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/universal name="Universal pipe adapter" desc = "An adapter for regular, supply and scrubbers pipes" connect_types = list(1,2,3) icon_state = "map_universal" +/obj/machinery/atmospherics/pipe/simple/hidden/universal/detailed_examine() + return "This allows you to connect 'normal' pipes, red 'scrubber' pipes, and blue 'supply' pipes." + /obj/machinery/atmospherics/pipe/simple/hidden/universal/update_icon(safety = 0) ..() diff --git a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_insulated.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_insulated.dm index e7e5ec55e90..3dbb3b2b38b 100644 --- a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_insulated.dm +++ b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_insulated.dm @@ -9,3 +9,6 @@ alert_pressure = 900*ONE_ATMOSPHERE level = 2 + +/obj/machinery/atmospherics/pipe/simple/insulated/detailed_examine() + return "This is completely useless, use a normal pipe." //Sorry, but it's true. diff --git a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_visible.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_visible.dm index c2aa015fb23..348453e758f 100644 --- a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_visible.dm +++ b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_visible.dm @@ -11,6 +11,10 @@ icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers/detailed_examine() + return "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 name = "Air supply pipe" desc = "A one meter section of supply pipe" @@ -20,6 +24,10 @@ icon_connect_type = "-supply" color = PIPE_COLOR_BLUE +/obj/machinery/atmospherics/pipe/simple/visible/supply/detailed_examine() + return "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/visible/yellow color = PIPE_COLOR_YELLOW @@ -44,6 +52,9 @@ connect_types = list(1,2,3) icon_state = "map_universal" +/obj/machinery/atmospherics/pipe/simple/visible/universal/detailed_examine() + return "This allows you to connect 'normal' pipes, red 'scrubber' pipes, and blue 'supply' pipes." + /obj/machinery/atmospherics/pipe/simple/visible/universal/update_icon(safety = 0) ..() diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index cc4daa540ff..5a9dc61863e 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -101,6 +101,14 @@ GLOBAL_DATUM_INIT(canister_icon_container, /datum/canister_icons, new()) color_index = list() update_icon() +/obj/machinery/portable_atmospherics/canister/detailed_examine() + return "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." + +/obj/machinery/portable_atmospherics/canister/detailed_examine_antag() + return "Canisters can be damaged, spilling their contents into the air, or you can just leave the release valve open." + /obj/machinery/portable_atmospherics/canister/proc/check_change() var/old_flag = update_flag update_flag = 0 diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index 32671689d18..49383c09bea 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -19,6 +19,11 @@ /// The desired pressure the pump should be outputting, either into the atmosphere, or into a holding tank. var/target_pressure = 101.325 +/obj/machinery/portable_atmospherics/pump/detailed_examine() + return "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." + /obj/machinery/portable_atmospherics/pump/update_icon() overlays = 0 diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 2fbcc4b0392..f106e7b8406 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -14,6 +14,11 @@ /// Is this scrubber acting on the 3x3 area around it. var/widenet = FALSE +/obj/machinery/portable_atmospherics/scrubber/detailed_examine() + return "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." + /obj/machinery/portable_atmospherics/scrubber/emp_act(severity) if(stat & (BROKEN|NOPOWER)) ..(severity) diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 1950c70556a..79a8a1860f9 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -69,6 +69,9 @@ //datum that controls the displaying and hiding of tooltips var/datum/tooltip/tooltips + /// Persistent storage for the flavour text of examined atoms. + var/list/description_holders = list() + // Their chat window, sort of important. // See /goon/code/datums/browserOutput.dm var/datum/chatOutput/chatOutput diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index b889246f73d..dbd5ab859e7 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -9,13 +9,15 @@ resistance_flags = NONE /obj/item/clothing/gloves/color/yellow/power - description_antag = "These are a pair of power gloves, and can be used to fire bolts of electricity while standing over powered power cables." var/old_mclick_override var/datum/middleClickOverride/power_gloves/mclick_override = new /datum/middleClickOverride/power_gloves var/last_shocked = 0 var/shock_delay = 40 var/unlimited_power = FALSE // Does this really need explanation? +/obj/item/clothing/gloves/color/yellow/power/detailed_examine_antag() + return "These are a pair of power gloves, and can be used to fire bolts of electricity while standing over powered power cables." + /obj/item/clothing/gloves/color/yellow/power/equipped(mob/user, slot) if(!ishuman(user)) return diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index c6cd609a2e4..6b27515dd93 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -967,11 +967,13 @@ //Syndicate Chaplain Robe (WOLOLO!) /obj/item/clothing/suit/hooded/chaplain_hoodie/missionary_robe - description_antag = "This robe is made of reinforced fibers, granting it superior protection. The robes also wirelessly generate power for the neurotransmitter in the linked missionary staff while being worn." w_class = WEIGHT_CLASS_NORMAL armor = list(melee = 10, bullet = 10, laser = 5, energy = 5, bomb = 0, bio = 0, rad = 15, fire = 30, acid = 30) var/obj/item/nullrod/missionary_staff/linked_staff = null +/obj/item/clothing/suit/hooded/chaplain_hoodie/missionary_robe/detailed_examine_antag() + return "This robe is made of reinforced fibers, granting it superior protection. The robes also wirelessly generate power for the neurotransmitter in the linked missionary staff while being worn." + /obj/item/clothing/suit/hooded/chaplain_hoodie/missionary_robe/Destroy() if(linked_staff) //delink on destruction linked_staff.robes = null diff --git a/code/modules/examine/descriptions/atmospherics.dm b/code/modules/examine/descriptions/atmospherics.dm deleted file mode 100644 index 55f4ecb761b..00000000000 --- a/code/modules/examine/descriptions/atmospherics.dm +++ /dev/null @@ -1,151 +0,0 @@ - -/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 += "
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/trinary/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/binary/valve - description_info = "Click this to turn the valve. If red, the pipes on each end are separated. 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 electricity 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." - -//Freezer and Heater -/obj/machinery/atmospherics/unary/thermomachine - description_info = "Cools or heats 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 air vent. 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." - -//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/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/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." diff --git a/code/modules/examine/descriptions/engineering.dm b/code/modules/examine/descriptions/engineering.dm deleted file mode 100644 index 6745c24f244..00000000000 --- a/code/modules/examine/descriptions/engineering.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/machinery/power/supermatter_crystal - 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.
\ -
\ - Supermatter cores are extremely dangerous to be close to, and requires protection to handle properly. The protection you will need is:
\ - Optical meson scanners on your eyes, to prevent hallucinations when looking at the supermatter.
\ - Radiation helmet and suit, as the supermatter is radioactive.
\ -
\ - 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 vacuum 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.
\ - To remove these safely, use the 'deflate' verb. Hitting these with any objects will probably puncture and break it forever." diff --git a/code/modules/examine/descriptions/medical.dm b/code/modules/examine/descriptions/medical.dm deleted file mode 100644 index 728a5f72c61..00000000000 --- a/code/modules/examine/descriptions/medical.dm +++ /dev/null @@ -1,42 +0,0 @@ -/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.
\ -
\ - 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.
\ -
\ - 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 is Cryoxadone, which \ - heals most damage types including genetic damage.
\ -
\ - 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.
\ -
\ - Clicking the tube with a beaker full of chemicals in hand will place it in its storage to distribute when it is activated.
\ -
\ - 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.
\ -
\ - 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.
\ -
\ - You can also inject common medicines directly into their bloodstream.\ -
\ - 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." diff --git a/code/modules/examine/descriptions/mobs.dm b/code/modules/examine/descriptions/mobs.dm deleted file mode 100644 index f8e205e855c..00000000000 --- a/code/modules/examine/descriptions/mobs.dm +++ /dev/null @@ -1,8 +0,0 @@ -/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 function 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." diff --git a/code/modules/examine/descriptions/stacks.dm b/code/modules/examine/descriptions/stacks.dm deleted file mode 100644 index f4e393195fa..00000000000 --- a/code/modules/examine/descriptions/stacks.dm +++ /dev/null @@ -1,24 +0,0 @@ -/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.
\ - As a synthetic, you can acquire more sheets of glass by recharging." - -/obj/item/stack/sheet/rglass - description_info = "Use in your hand to build a window. Reinforced glass is much stronger against damage." - -/obj/item/stack/sheet/rglass/cyborg - description_info = "Use in your hand to build a window. Reinforced glass is much stronger against damage.
\ - 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.
\ - 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." diff --git a/code/modules/examine/descriptions/structures.dm b/code/modules/examine/descriptions/structures.dm deleted file mode 100644 index 0f7d6c98834..00000000000 --- a/code/modules/examine/descriptions/structures.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/structure/girder - description_info = "Use metal sheets on this to build a normal wall. Adding plasteel instead will make a reinforced wall.
\ - A false wall can be made by using a crowbar on this girder, and then adding metal or plasteel.
\ - You can dismantle the girder 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.
\ - 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.
\ - 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.
\ -
\ - 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." diff --git a/code/modules/examine/descriptions/turfs.dm b/code/modules/examine/descriptions/turfs.dm deleted file mode 100644 index 81aea3eb755..00000000000 --- a/code/modules/examine/descriptions/turfs.dm +++ /dev/null @@ -1,3 +0,0 @@ -/turf/simulated/wall - description_info = "You can deconstruct this by welding it, and then wrenching the girder.
\ - You can build a wall by using metal sheets and making a girder, then adding more metal or plasteel." diff --git a/code/modules/examine/descriptions/weapons.dm b/code/modules/examine/descriptions/weapons.dm deleted file mode 100644 index 2b8c234564a..00000000000 --- a/code/modules/examine/descriptions/weapons.dm +++ /dev/null @@ -1,68 +0,0 @@ -/* - 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/gun - description_info = "This is a gun." - -/obj/item/gun/energy - description_info = "This is an energy weapon. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger." - -/obj/item/gun/energy/kinetic_accelerator/crossbow - description_info = "This is an energy weapon. To fire the weapon, 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/gun/energy/gun - description_info = "This is an energy weapon. 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/gun/energy/gun/advtaser - description_info = "This is an energy weapon. To recharge this weapon, use a weapon recharger. \ - To switch between insta-stun and disabler beams, click the weapon in your hand. This weapon can only fire through glass if it is set to disabler beams." - -/obj/item/gun/energy/gun/nuclear - description_info = "This is an energy weapon. 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/gun/energy/laser/captain - description_info = "This is an energy weapon. Most energy weapons can fire through windows harmlessly. Unlike most weapons, this weapon recharges itself." - -/obj/item/gun/energy/sniperrifle - description_info = "This is an energy weapon. 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/gun/projectile - description_info = "This is a ballistic weapon. To reload, click the weapon in your hand to unload (if needed), then add the appropriate ammo. The description \ - will tell you what caliber you need." - -/obj/item/gun/projectile/shotgun/pump - description_info = "This is a ballistic weapon. 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/toy/russian_revolver/trick_revolver //oh no - description_info = "This is a ballistic weapon. To reload, click the weapon in your hand to unload (if needed), then add the appropriate ammo. The description \ - will tell you what caliber you need." - -//******* -//*Melee* -//******* - -/obj/item/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/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/melee/cultblade - description_antag = "This sword is a powerful weapon, capable of severing limbs easily, if they are targeted. Nonbelievers are unable to use this weapon." diff --git a/code/modules/examine/examine.dm b/code/modules/examine/examine.dm index 3a45529958a..b8c53182137 100644 --- a/code/modules/examine/examine.dm +++ b/code/modules/examine/examine.dm @@ -1,62 +1,54 @@ -/* 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. +/** + * Used for showing a more detailed description in the 'Examine' tab after examining the atom. + * + * Shown as blue text in the Examine tab. + */ +/atom/proc/detailed_examine() + return null - 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. -*/ +/** + * Used for showing a more detailed description to antags in the 'Examine' after examining the atom. + * + * Shown as red text in the Examine tab. + */ +/atom/proc/detailed_examine_antag() + return null +/** + * Used for showing flavour text in the 'Examine' tab after examining the atom. + * + * Shown as green text in the Examine tab. The custom flavour text of `/mob` subtypes override this. + */ +/atom/proc/detailed_examine_fluff() + return null -/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() +/mob/detailed_examine_fluff() if(flavor_text) //Get flavor text for the green text. return flavor_text - else //No flavor text? Try for hardcoded fluff instead. + else //No flavor text? Try for hardcoded fluff instead. return ..() -/mob/living/carbon/human/get_description_fluff() +/mob/living/carbon/human/detailed_examine_fluff() return print_flavor_text() -/* 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() : "" +/client/proc/update_description_holders(atom/A, update_antag_info = FALSE) description_holders["name"] = "[A.name]" - description_holders["icon"] = "[bicon(A)]" description_holders["desc"] = A.desc + description_holders["info"] = A.detailed_examine() + description_holders["fluff"] = A.detailed_examine_fluff() + description_holders["antag"] = update_antag_info ? A.detailed_examine_antag() : null + +// The examine panel itself /client/Stat() . = ..() if(usr && statpanel("Examine")) - stat(null,"[description_holders["icon"]] [description_holders["name"]]") //The name, written in big letters. - stat(null,"[description_holders["desc"]]") //the default examine text. + stat(null, "[description_holders["name"]]") //The name, written in big letters. + stat(null, "[description_holders["desc"]]") //the default examine text. if(description_holders["info"]) - stat(null,"[description_holders["info"]]") //Blue, informative text. + stat(null, "[description_holders["info"]]") //Blue, informative text. if(description_holders["fluff"]) - stat(null,"[description_holders["fluff"]]") //Yellow, fluff-related text. + stat(null, "[description_holders["fluff"]]") //Yellow, fluff-related text. if(description_holders["antag"]) - stat(null,"[description_holders["antag"]]") //Red, malicious antag-related text + stat(null, "[description_holders["antag"]]") //Red, malicious antag-related text diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index e1e1563459c..43cd80443b8 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -133,6 +133,16 @@ if(emagged) return FALSE +/mob/living/silicon/robot/drone/detailed_examine() + return "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 function 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." + +/mob/living/silicon/robot/drone/detailed_examine_antag() + return "An Electromagnetic Sequencer can be used to subvert the drone to your cause." + //Drones cannot be upgraded with borg modules so we need to catch some items before they get used in ..(). /mob/living/silicon/robot/drone/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/borg/upgrade)) diff --git a/code/modules/pda/cart.dm b/code/modules/pda/cart.dm index bd6994d21c3..5adb2e819f3 100644 --- a/code/modules/pda/cart.dm +++ b/code/modules/pda/cart.dm @@ -300,6 +300,10 @@ icon_state = "cart-eye" programs = list(new/datum/data/pda/app/mob_hunter_game) +/obj/item/cartridge/mob_hunt_game/detailed_examine_antag() + if(emagged) + return "This copy of Nano-Mob Hunter GO! has been hacked to allow the creation of trap mobs which will cause any PDA that attempts to capture it to shock anyone holding it. Hacked copies of the game will not trigger the trap." + /obj/item/cartridge/mob_hunt_game/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/nanomob_card)) var/obj/item/nanomob_card/card = O @@ -319,4 +323,3 @@ my_game.hacked = 1 to_chat(user, "TR4P_M45T3R.mod successfully initialized. ToS violated. User Agreement nullified. Gotta pwn them all.") to_chat(user, "You can now create trapped versions of any mob in your collection that will damage hunters who attempt to capture it.") - description_antag = "This copy of Nano-Mob Hunter GO! has been hacked to allow the creation of trap mobs which will cause any PDA that attempts to capture it to shock anyone holding it. Hacked copies of the game will not trigger the trap." diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 09d49a3330a..49044665c08 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -254,6 +254,17 @@ else . += "The cover is closed." +/obj/machinery/power/apc/detailed_examine() + return "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." + +/obj/machinery/power/apc/detailed_examine_antag() + return "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." + // update the APC icon to show the three base states // also add overlays for indicator lights /obj/machinery/power/apc/update_icon(force_update = FALSE) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 2210c8710db..8054ccfc45e 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -224,6 +224,23 @@ if(!immune && (get_dist(user, src) < HALLUCINATION_RANGE(power))) . += "You get headaches just from looking at it." +/obj/machinery/power/supermatter_crystal/detailed_examine() + return "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.
\ +
\ + Supermatter cores are extremely dangerous to be close to, and requires protection to handle properly. The protection you will need is:
\ + Optical meson scanners on your eyes, to prevent hallucinations when looking at the supermatter.
\ + Radiation helmet and suit, as the supermatter is radioactive.
\ +
\ + 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." + +/obj/machinery/power/supermatter_crystal/detailed_examine_antag() + return "Exposing the supermatter to oxygen or vacuum 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/supermatter_crystal/proc/get_status() var/turf/T = get_turf(src) if(!T) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index dedba26bb68..69a67c5ffc6 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -99,6 +99,9 @@ else if(can_bayonet) . += "It has a bayonet lug on it." +/obj/item/gun/detailed_examine() // Truly detailed + return "This is a gun." + /obj/item/gun/proc/process_chamber() return 0 diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index c7b5f933c7c..84918beaa8d 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -20,6 +20,9 @@ /// Do you want the gun to fit into a turret, defaults to true, used for if a energy gun is too strong to be in a turret, or does not make sense to be in one. var/can_fit_in_turrets = TRUE +/obj/item/gun/energy/detailed_examine() + return "This is an energy weapon. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger." + /obj/item/gun/energy/emp_act(severity) cell.use(round(cell.charge / severity)) if(chambered)//phil235 diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 543989bb146..b205dc44797 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -35,6 +35,9 @@ selfcharge = 1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF +/obj/item/gun/energy/laser/captain/detailed_examine() + return "This is an energy weapon. Most energy weapons can fire through windows harmlessly. Unlike most weapons, this weapon recharges itself." + /obj/item/gun/energy/laser/captain/scattershot name = "scatter shot laser rifle" icon_state = "lasercannon" diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index a39e018909a..4fac1c96828 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -11,6 +11,10 @@ flight_y_offset = 10 shaded_charge = TRUE +/obj/item/gun/energy/gun/detailed_examine() + return "This is an energy weapon. 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/gun/energy/gun/cyborg desc = "An energy-based laser gun that draws power from the cyborg's internal energy cell directly. So this is what freedom looks like?" @@ -96,3 +100,7 @@ ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser, /obj/item/ammo_casing/energy/disabler) selfcharge = 1 shaded_charge = FALSE + +/obj/item/gun/energy/gun/nuclear/detailed_examine() + return "This is an energy weapon. 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." diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 09458fd8ba7..5801a1daa59 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -110,6 +110,14 @@ max_mod_capacity = 0 empty_state = null +/obj/item/gun/energy/kinetic_accelerator/crossbow/detailed_examine() + return "This is an energy weapon. To fire the weapon, have your gun mode set to 'fire', \ + then click where you want to fire." + +/obj/item/gun/energy/kinetic_accelerator/crossbow/detailed_examine_antag() + return "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/gun/energy/kinetic_accelerator/crossbow/large name = "energy crossbow" desc = "A reverse engineered weapon using syndicate technology." @@ -317,6 +325,10 @@ zoom_amt = 7 //Long range, enough to see in front of you, but no tiles behind you. shaded_charge = 1 +/obj/item/gun/energy/sniperrifle/detailed_examine() + return "This is an energy weapon. 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/gun/energy/bsg name = "\improper B.S.G" desc = "The Blue Space Gun. Uses a flux anomaly core and a bluespace crystal to produce destructive bluespace energy blasts, inspired by Nanotrasen's BSA division." diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 2247a1a6c9c..7e5657e0099 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -27,6 +27,10 @@ flight_x_offset = 15 shaded_charge = FALSE +/obj/item/gun/energy/gun/advtaser/detailed_examine() + return "This is an energy weapon. To recharge this weapon, use a weapon recharger. \ + To switch between insta-stun and disabler beams, click the weapon in your hand. This weapon can only fire through glass if it is set to disabler beams." + /obj/item/gun/energy/gun/advtaser/cyborg name = "cyborg taser" desc = "An integrated hybrid taser that draws directly from a cyborg's power cell. The weapon contains a limiter to prevent the cyborg's power cell from overheating." diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 0a005077a6e..ef0f30e1b25 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -18,6 +18,10 @@ update_icon() return +/obj/item/gun/projectile/detailed_examine() + return "This is a ballistic weapon. To reload, click the weapon in your hand to unload (if needed), then add the appropriate ammo. The description \ + will tell you what caliber you need." + /obj/item/gun/projectile/update_icon() ..() if(current_skin) diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index c182f909795..16bdfec9b2b 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -18,6 +18,10 @@ var/recentpump = 0 // to prevent spammage weapon_weight = WEAPON_HEAVY +/obj/item/gun/projectile/shotgun/detailed_examine() + return "This is a ballistic weapon. 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/gun/projectile/shotgun/attackby(obj/item/A, mob/user, params) . = ..() if(.) @@ -306,6 +310,10 @@ /obj/item/gun/projectile/shotgun/automatic +/obj/item/gun/projectile/shotgun/automatic/detailed_examine() + return "This is a ballistic weapon. After firing, it will automatically cycle the next shell. To reload, load more shotgun \ + shells into the gun." + /obj/item/gun/projectile/shotgun/automatic/shoot_live_shot(mob/living/user, atom/target, pointblank = FALSE, message = TRUE) ..() pump(user) diff --git a/paradise.dme b/paradise.dme index aae3f21d5a3..40cd6ebed27 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1528,14 +1528,6 @@ #include "code\modules\events\wormholes.dm" #include "code\modules\events\wizard\ghost.dm" #include "code\modules\examine\examine.dm" -#include "code\modules\examine\descriptions\atmospherics.dm" -#include "code\modules\examine\descriptions\engineering.dm" -#include "code\modules\examine\descriptions\medical.dm" -#include "code\modules\examine\descriptions\mobs.dm" -#include "code\modules\examine\descriptions\stacks.dm" -#include "code\modules\examine\descriptions\structures.dm" -#include "code\modules\examine\descriptions\turfs.dm" -#include "code\modules\examine\descriptions\weapons.dm" #include "code\modules\fish\fish_eggs.dm" #include "code\modules\fish\fish_items.dm" #include "code\modules\fish\fish_types.dm"