diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index 054bf07f70..23b398605c 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -95,6 +95,7 @@ Class Procs:
/obj/machinery
name = "machinery"
icon = 'icons/obj/stationobjs.dmi'
+ desc = "Some kind of machine."
verb_say = "beeps"
verb_yell = "blares"
pressure_resistance = 15
diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm
index c23f4d0ba8..5e0d018554 100644
--- a/code/game/machinery/embedded_controller/access_controller.dm
+++ b/code/game/machinery/embedded_controller/access_controller.dm
@@ -42,6 +42,7 @@
icon = 'icons/obj/airlock_machines.dmi'
icon_state = "access_button_standby"
name = "access button"
+ desc = "A button used for the explicit purpose of opening an airlock."
var/idDoor
var/obj/machinery/door/airlock/door
var/obj/machinery/doorButtons/airlock_controller/controller
@@ -107,6 +108,7 @@
icon = 'icons/obj/airlock_machines.dmi'
icon_state = "access_control_standby"
name = "access console"
+ desc = "A small console that can cycle opening between two airlocks."
var/obj/machinery/door/airlock/interiorAirlock
var/obj/machinery/door/airlock/exteriorAirlock
var/idInterior
diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm
index a979ba6398..102be57f9b 100644
--- a/code/game/machinery/lightswitch.dm
+++ b/code/game/machinery/lightswitch.dm
@@ -6,6 +6,7 @@
icon = 'icons/obj/power.dmi'
icon_state = "light1"
anchored = TRUE
+ desc = "Make dark."
var/on = TRUE
var/area/area = null
var/otherarea = null
diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm
index 39b3760f7e..cedb94b7b3 100644
--- a/code/game/machinery/pipe/pipe_dispenser.dm
+++ b/code/game/machinery/pipe/pipe_dispenser.dm
@@ -2,6 +2,7 @@
name = "pipe dispenser"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "pipe_d"
+ desc = "Dispenses countless types of pipes. Very useful if you need pipes."
density = TRUE
anchored = TRUE
var/wait = 0
@@ -108,6 +109,7 @@
name = "disposal pipe dispenser"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "pipe_d"
+ desc = "Dispenses pipes that will ultimately be used to move trash around."
density = TRUE
anchored = TRUE
@@ -183,6 +185,7 @@ Nah
icon = 'icons/obj/stationobjs.dmi'
icon_state = "pipe_d"
density = TRUE
+ desc = "Dispenses pipes that will move beings around."
anchored = TRUE
/obj/machinery/pipedispenser/disposal/transit_tube/attack_hand(mob/user)
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index b84de7cf18..e9f0f76bc9 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -12,6 +12,7 @@
layer = OBJ_LAYER
invisibility = INVISIBILITY_OBSERVER //the turret is invisible if it's inside its cover
density = TRUE
+ desc = "A covered turret that shoots at its enemies."
use_power = IDLE_POWER_USE //this turret uses and requires power
idle_power_usage = 50 //when inactive, this turret takes up constant 50 Equipment power
active_power_usage = 300 //when active, this turret takes up constant 300 Equipment power
@@ -552,6 +553,7 @@
base_icon_state = "syndie"
faction = "syndicate"
emp_vunerable = 0
+ desc = "A ballistic machine gun auto-turret."
/obj/machinery/porta_turret/syndicate/energy
icon_state = "standard_stun"
@@ -560,6 +562,7 @@
stun_projectile_sound = 'sound/weapons/taser.ogg'
lethal_projectile = /obj/item/projectile/beam/laser/heavylaser
lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg'
+ desc = "An energy blaster auto-turret."
/obj/machinery/porta_turret/syndicate/setup()
return
diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm
index 1dbdc52b1e..7eace08636 100644
--- a/code/game/machinery/porta_turret/portable_turret_construct.dm
+++ b/code/game/machinery/porta_turret/portable_turret_construct.dm
@@ -12,6 +12,7 @@
name = "turret frame"
icon = 'icons/obj/turrets.dmi'
icon_state = "turret_frame"
+ desc = "An unfinished covered turret frame."
density = TRUE
var/build_step = PTURRET_UNSECURED //the current step in the building process
var/finish_name = "turret" //the name applied to the product turret
diff --git a/code/game/machinery/telecomms/computers/logbrowser.dm b/code/game/machinery/telecomms/computers/logbrowser.dm
index 92a4edfcd2..590c8d03a5 100644
--- a/code/game/machinery/telecomms/computers/logbrowser.dm
+++ b/code/game/machinery/telecomms/computers/logbrowser.dm
@@ -3,6 +3,7 @@
/obj/machinery/computer/telecomms/server
name = "telecommunications server monitoring console"
icon_screen = "comm_logs"
+ desc = "Has full access to all details and record of the telecommunications network it's monitoring."
var/screen = 0 // the screen number:
var/list/servers = list() // the servers located by the computer
diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm
index bccbfd96fd..cb3ae78e72 100644
--- a/code/game/machinery/telecomms/computers/telemonitor.dm
+++ b/code/game/machinery/telecomms/computers/telemonitor.dm
@@ -8,6 +8,7 @@
/obj/machinery/computer/telecomms/monitor
name = "telecommunications monitoring console"
icon_screen = "comm_monitor"
+ desc = "Monitors the details of the telecommunications network it's synced with."
var/screen = 0 // the screen number:
var/list/machinelist = list() // the machines located by the computer
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 0f59d00ab8..83d29457f6 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -4,6 +4,7 @@
suffix = "\[3\]"
icon_state = "walkietalkie"
item_state = "walkietalkie"
+ desc = "A basic handheld radio that communicates with local telecommunication networks."
dog_fashion = /datum/dog_fashion/back
var/on = TRUE // 0 for off
var/last_transmission
diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm
index 28d4d13967..c8249024f8 100644
--- a/code/game/objects/items/shooting_range.dm
+++ b/code/game/objects/items/shooting_range.dm
@@ -41,7 +41,7 @@
/obj/item/target/syndicate
icon_state = "target_s"
- desc = "A shooting target that looks like a syndicate scum."
+ desc = "A shooting target that looks like syndicate scum."
hp = 2600
/obj/item/target/alien
diff --git a/code/game/objects/items/signs.dm b/code/game/objects/items/signs.dm
index c492b752f0..350daa0fc3 100644
--- a/code/game/objects/items/signs.dm
+++ b/code/game/objects/items/signs.dm
@@ -1,7 +1,7 @@
/obj/item/picket_sign
icon_state = "picket"
name = "blank picket sign"
- desc = "It's blank"
+ desc = "It's blank."
force = 5
w_class = WEIGHT_CLASS_BULKY
attack_verb = list("bashed","smacked")
diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm
index b5417e8f8e..435bc64c41 100644
--- a/code/game/objects/items/storage/fancy.dm
+++ b/code/game/objects/items/storage/fancy.dm
@@ -17,6 +17,7 @@
icon = 'icons/obj/food/containers.dmi'
icon_state = "donutbox6"
name = "donut box"
+ desc = "Mmm. Donuts."
resistance_flags = FLAMMABLE
var/icon_type = "donut"
var/spawn_type = null
diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm
index ef65f2dac3..4d56b6a8e8 100644
--- a/code/game/objects/items/storage/secure.dm
+++ b/code/game/objects/items/storage/secure.dm
@@ -25,6 +25,7 @@
w_class = WEIGHT_CLASS_NORMAL
max_w_class = WEIGHT_CLASS_SMALL
max_combined_w_class = 14
+ desc = "This shouldn't exist. If it does, create an issue report."
/obj/item/storage/secure/examine(mob/user)
..()
@@ -177,6 +178,7 @@
icon_opened = "safe0"
icon_locking = "safeb"
icon_sparking = "safespark"
+ desc = "Excellent for securing things away from grubby hands."
force = 8
w_class = WEIGHT_CLASS_GIGANTIC
max_w_class = 8
diff --git a/code/game/objects/items/vending_items.dm b/code/game/objects/items/vending_items.dm
index b062c39ee5..e84295f8ed 100644
--- a/code/game/objects/items/vending_items.dm
+++ b/code/game/objects/items/vending_items.dm
@@ -5,6 +5,7 @@
icon = 'icons/obj/vending_restock.dmi'
icon_state = "refill_snack"
item_state = "restock_unit"
+ desc = "A vending machine restock cart."
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
flags_1 = CONDUCT_1
diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm
index 709d86d4d7..d01cd5a191 100644
--- a/code/game/objects/structures/ai_core.dm
+++ b/code/game/objects/structures/ai_core.dm
@@ -4,6 +4,7 @@
name = "\improper AI core"
icon = 'icons/mob/ai.dmi'
icon_state = "0"
+ desc = "The framework for an artificial intelligence core."
max_integrity = 500
var/state = 0
var/datum/ai_laws/laws = new()
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 1183618d5a..0dee3b2191 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -6,6 +6,7 @@
anchored = FALSE
density = TRUE
max_integrity = 200
+ desc = "The mechanical framework for an airlock."
var/state = 0
var/mineral = null
var/typetext = ""
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index 6aa338f047..c1b6c56bf5 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -6,6 +6,7 @@
//trees
/obj/structure/flora/tree
name = "tree"
+ desc = "A large tree."
density = TRUE
pixel_x = -16
layer = FLY_LAYER
@@ -40,6 +41,7 @@
/obj/structure/flora/tree/pine
name = "pine tree"
+ desc = "A coniferous pine tree."
icon = 'icons/obj/flora/pinetrees.dmi'
icon_state = "pine_1"
@@ -49,6 +51,7 @@
/obj/structure/flora/tree/pine/xmas
name = "xmas tree"
+ desc = "A wondrous decorated Christmas tree."
icon_state = "pine_c"
/obj/structure/flora/tree/pine/xmas/Initialize()
@@ -57,10 +60,12 @@
/obj/structure/flora/tree/dead
icon = 'icons/obj/flora/deadtrees.dmi'
+ desc = "A dead tree. How it died, you know not."
icon_state = "tree_1"
/obj/structure/flora/tree/palm
icon = 'icons/misc/beach2.dmi'
+ desc = "A tree straight from the tropics."
icon_state = "palm1"
/obj/structure/flora/tree/palm/Initialize()
@@ -98,6 +103,7 @@
//grass
/obj/structure/flora/grass
name = "grass"
+ desc = "A patch of overgrown grass."
icon = 'icons/obj/flora/snowflora.dmi'
gender = PLURAL //"this is grass" not "this is a grass"
@@ -127,6 +133,7 @@
//bushes
/obj/structure/flora/bush
name = "bush"
+ desc = "Some type of shrub."
icon = 'icons/obj/flora/snowflora.dmi'
icon_state = "snowbush1"
anchored = TRUE
@@ -139,6 +146,7 @@
/obj/structure/flora/ausbushes
name = "bush"
+ desc = "Some kind of plant."
icon = 'icons/obj/flora/ausflora.dmi'
icon_state = "firstbush_1"
@@ -256,6 +264,7 @@
name = "potted plant"
icon = 'icons/obj/flora/plants.dmi'
icon_state = "plant-01"
+ desc = "A little bit of nature contained in a pot."
layer = ABOVE_MOB_LAYER
w_class = WEIGHT_CLASS_HUGE
force = 10
@@ -365,6 +374,7 @@
/obj/structure/flora/junglebush
name = "bush"
+ desc = "A wild plant that is found in jungles."
icon = 'icons/obj/flora/jungleflora.dmi'
icon_state = "busha"
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 02f6d784df..3d7e9be21a 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -1,6 +1,7 @@
/obj/structure/girder
name = "girder"
icon_state = "girder"
+ desc = "A large structural assembly made out of metal; It requires a layer of metal before it can be considered a wall."
anchored = TRUE
density = TRUE
layer = BELOW_OBJ_LAYER
diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm
index ffc62ac127..1c2c0c326e 100644
--- a/code/game/objects/structures/transit_tubes/station.dm
+++ b/code/game/objects/structures/transit_tubes/station.dm
@@ -7,6 +7,7 @@
/obj/structure/transit_tube/station
name = "station tube station"
icon_state = "closed_station0"
+ desc = "The lynchpin of the transit system."
exit_delay = 1
enter_delay = 2
tube_construction = /obj/structure/c_transit_tube/station
diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm
index 10d883d392..e409eb533b 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube.dm
@@ -3,6 +3,7 @@
name = "transit tube"
icon = 'icons/obj/atmospherics/pipes/transit_tube.dmi'
icon_state = "straight"
+ desc = "A transit tube for moving things around."
density = TRUE
layer = LOW_ITEM_LAYER
anchored = TRUE
diff --git a/code/game/objects/structures/transit_tubes/transit_tube_construction.dm b/code/game/objects/structures/transit_tubes/transit_tube_construction.dm
index a1f7bcc8de..746790a20f 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube_construction.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube_construction.dm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
// transit tube construction
// normal transit tubes
@@ -5,6 +6,16 @@
name = "unattached transit tube"
icon = 'icons/obj/atmospherics/pipes/transit_tube.dmi'
icon_state = "straight"
+=======
+// transit tube construction
+
+// normal transit tubes
+/obj/structure/c_transit_tube
+ name = "unattached transit tube"
+ icon = 'icons/obj/atmospherics/pipes/transit_tube.dmi'
+ icon_state = "straight"
+ desc = "An unattached segment of transit tube."
+>>>>>>> 3e4d747... Adds desc to things lacking them. (#31086)
density = FALSE
layer = LOW_ITEM_LAYER //same as the built tube
anchored = FALSE
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 6503acf6d3..2dbc8f38a6 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
/* Windoor (window door) assembly -Nodrak
* Step 1: Create a windoor out of rglass
* Step 2: Add r-glass to the assembly to make a secure windoor (Optional)
@@ -14,6 +15,25 @@
name = "windoor Assembly"
icon_state = "l_windoor_assembly01"
+=======
+/* Windoor (window door) assembly -Nodrak
+ * Step 1: Create a windoor out of rglass
+ * Step 2: Add r-glass to the assembly to make a secure windoor (Optional)
+ * Step 3: Rotate or Flip the assembly to face and open the way you want
+ * Step 4: Wrench the assembly in place
+ * Step 5: Add cables to the assembly
+ * Step 6: Set access for the door.
+ * Step 7: Screwdriver the door to complete
+ */
+
+
+/obj/structure/windoor_assembly
+ icon = 'icons/obj/doors/windoor.dmi'
+
+ name = "windoor Assembly"
+ icon_state = "l_windoor_assembly01"
+ desc = "A small glass and wire assembly for windoors."
+>>>>>>> 3e4d747... Adds desc to things lacking them. (#31086)
anchored = FALSE
density = FALSE
dir = NORTH
diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm
index 4722991309..80329f20a1 100644
--- a/code/game/shuttle_engines.dm
+++ b/code/game/shuttle_engines.dm
@@ -12,6 +12,7 @@
/obj/structure/shuttle/engine
name = "engine"
+ desc = "A bluespace engine used to make shuttles move."
density = TRUE
anchored = TRUE
var/engine_power = 1
@@ -81,18 +82,21 @@
M.alter_engines(mod)
/obj/structure/shuttle/engine/heater
- name = "heater"
+ name = "engine heater"
icon_state = "heater"
+ desc = "Directs energy into compressed particles in order to power engines."
engine_power = 0 // todo make these into 2x1 parts
/obj/structure/shuttle/engine/platform
- name = "platform"
+ name = "engine platform"
icon_state = "platform"
+ desc = "A platform for engine components."
engine_power = 0
/obj/structure/shuttle/engine/propulsion
name = "propulsion engine"
icon_state = "propulsion"
+ desc = "A standard reliable bluespace engine used by many forms of shuttles."
opacity = 1
/obj/structure/shuttle/engine/propulsion/left
@@ -105,6 +109,7 @@
/obj/structure/shuttle/engine/propulsion/burst
name = "burst engine"
+ desc = "An engine that releases a large bluespace burst to propel it."
/obj/structure/shuttle/engine/propulsion/burst/cargo
state = ENGINE_UNWRENCHED
@@ -119,14 +124,16 @@
icon_state = "burst_r"
/obj/structure/shuttle/engine/router
- name = "router"
+ name = "engine router"
icon_state = "router"
+ desc = "Redirects around energized particles in engine structures."
/obj/structure/shuttle/engine/large
name = "engine"
opacity = 1
icon = 'icons/obj/2x2.dmi'
icon_state = "large_engine"
+ desc = "A very large bluespace engine used to propel very large ships."
bound_width = 64
bound_height = 64
appearance_flags = 0
@@ -136,6 +143,7 @@
opacity = 1
icon = 'icons/obj/3x3.dmi'
icon_state = "huge_engine"
+ desc = "An extremely large bluespace engine used to propel extremely large ships."
bound_width = 96
bound_height = 96
- appearance_flags = 0
\ No newline at end of file
+ appearance_flags = 0
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
index 7ef6cf2142..dbe1343667 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm
@@ -5,7 +5,7 @@ It's like a regular ol' straight pipe, but you can turn it on and off.
/obj/machinery/atmospherics/components/binary/valve
icon_state = "mvalve_map"
name = "manual valve"
- desc = "A pipe valve"
+ desc = "A pipe with a valve that can be used to disable flow of gas through it."
can_unwrench = TRUE
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
index c777e5fe17..2b5a94ef64 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm
@@ -1,6 +1,7 @@
/obj/machinery/atmospherics/components/trinary/filter
name = "gas filter"
icon_state = "filter_off"
+ desc = "Very useful for filtering gasses."
density = FALSE
can_unwrench = TRUE
var/on = FALSE
diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
index cb515ec75f..1fb8b072c6 100644
--- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
+++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm
@@ -4,6 +4,7 @@
name = "gas mixer"
can_unwrench = TRUE
+ desc = "Very useful for mixing gasses."
var/on = FALSE
diff --git a/code/modules/atmospherics/machinery/other/zvent.dm b/code/modules/atmospherics/machinery/other/zvent.dm
index 3490c972d9..d12c6196ec 100644
--- a/code/modules/atmospherics/machinery/other/zvent.dm
+++ b/code/modules/atmospherics/machinery/other/zvent.dm
@@ -5,6 +5,7 @@
icon_state = "vent_map"
density = FALSE
anchored=1
+ desc = "This may be needed some day."
var/on = FALSE
var/volume_rate = 800
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index db3bcd3538..87106d65b4 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -283,7 +283,7 @@
/obj/item/clothing/head/crown/fancy
name = "magnificent crown"
- desc = "A crown worn by only the highest emperors of the land."
+ desc = "A crown worn by only the highest emperors of the land space."
icon_state = "fancycrown"
/obj/item/clothing/head/scarecrow_hat
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index 17d626b3a0..c55aa8d43f 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
/* Library Items
*
* Contains:
@@ -317,4 +318,329 @@
to_chat(user, "Computer has been associated with this unit.")
else
to_chat(user, "No associated computer found. Only local scans will function properly.")
- to_chat(user, "\n")
\ No newline at end of file
+ to_chat(user, "\n")
+=======
+/* Library Items
+ *
+ * Contains:
+ * Bookcase
+ * Book
+ * Barcode Scanner
+ */
+
+/*
+ * Bookcase
+ */
+
+/obj/structure/bookcase
+ name = "bookcase"
+ icon = 'icons/obj/library.dmi'
+ icon_state = "bookempty"
+ desc = "A great place for storing knowledge."
+ anchored = FALSE
+ density = TRUE
+ opacity = 0
+ resistance_flags = FLAMMABLE
+ max_integrity = 200
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 0)
+ var/state = 0
+ var/list/allowed_books = list(/obj/item/book, /obj/item/spellbook, /obj/item/storage/book) //Things allowed in the bookcase
+
+
+/obj/structure/bookcase/Initialize(mapload)
+ . = ..()
+ if(!mapload)
+ return
+ state = 2
+ icon_state = "book-0"
+ anchored = TRUE
+ for(var/obj/item/I in loc)
+ if(istype(I, /obj/item/book))
+ I.loc = src
+ update_icon()
+
+
+/obj/structure/bookcase/attackby(obj/item/I, mob/user, params)
+ switch(state)
+ if(0)
+ if(istype(I, /obj/item/wrench))
+ playsound(loc, I.usesound, 100, 1)
+ if(do_after(user, 20*I.toolspeed, target = src))
+ to_chat(user, "You wrench the frame into place.")
+ anchored = TRUE
+ state = 1
+ if(istype(I, /obj/item/crowbar))
+ playsound(loc, I.usesound, 100, 1)
+ if(do_after(user, 20*I.toolspeed, target = src))
+ to_chat(user, "You pry the frame apart.")
+ deconstruct(TRUE)
+
+ if(1)
+ if(istype(I, /obj/item/stack/sheet/mineral/wood))
+ var/obj/item/stack/sheet/mineral/wood/W = I
+ if(W.get_amount() >= 2)
+ W.use(2)
+ to_chat(user, "You add a shelf.")
+ state = 2
+ icon_state = "book-0"
+ if(istype(I, /obj/item/wrench))
+ playsound(loc, I.usesound, 100, 1)
+ to_chat(user, "You unwrench the frame.")
+ anchored = FALSE
+ state = 0
+
+ if(2)
+ if(is_type_in_list(I, allowed_books))
+ if(!user.drop_item())
+ return
+ I.loc = src
+ update_icon()
+ else if(istype(I, /obj/item/storage/bag/books))
+ var/obj/item/storage/bag/books/B = I
+ for(var/obj/item/T in B.contents)
+ if(istype(T, /obj/item/book) || istype(T, /obj/item/spellbook))
+ B.remove_from_storage(T, src)
+ to_chat(user, "You empty \the [I] into \the [src].")
+ update_icon()
+ else if(istype(I, /obj/item/pen))
+ var/newname = stripped_input(user, "What would you like to title this bookshelf?")
+ if(!newname)
+ return
+ else
+ name = ("bookcase ([sanitize(newname)])")
+ else if(istype(I, /obj/item/crowbar))
+ if(contents.len)
+ to_chat(user, "You need to remove the books first!")
+ else
+ playsound(loc, I.usesound, 100, 1)
+ to_chat(user, "You pry the shelf out.")
+ new /obj/item/stack/sheet/mineral/wood(loc, 2)
+ state = 1
+ icon_state = "bookempty"
+ else
+ return ..()
+
+
+/obj/structure/bookcase/attack_hand(mob/user)
+ if(contents.len)
+ var/obj/item/book/choice = input("Which book would you like to remove from the shelf?") as null|obj in contents
+ if(choice)
+ if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
+ return
+ if(ishuman(user))
+ if(!user.get_active_held_item())
+ user.put_in_hands(choice)
+ else
+ choice.loc = get_turf(src)
+ update_icon()
+
+
+/obj/structure/bookcase/deconstruct(disassembled = TRUE)
+ new /obj/item/stack/sheet/mineral/wood(loc, 4)
+ for(var/obj/item/book/B in contents)
+ B.forceMove(get_turf(src))
+ qdel(src)
+
+
+/obj/structure/bookcase/update_icon()
+ if(contents.len < 5)
+ icon_state = "book-[contents.len]"
+ else
+ icon_state = "book-5"
+
+
+/obj/structure/bookcase/manuals/medical
+ name = "medical manuals bookcase"
+
+/obj/structure/bookcase/manuals/medical/New()
+ ..()
+ new /obj/item/book/manual/medical_cloning(src)
+ update_icon()
+
+
+/obj/structure/bookcase/manuals/engineering
+ name = "engineering manuals bookcase"
+
+/obj/structure/bookcase/manuals/engineering/New()
+ ..()
+ new /obj/item/book/manual/wiki/engineering_construction(src)
+ new /obj/item/book/manual/engineering_particle_accelerator(src)
+ new /obj/item/book/manual/wiki/engineering_hacking(src)
+ new /obj/item/book/manual/wiki/engineering_guide(src)
+ new /obj/item/book/manual/engineering_singularity_safety(src)
+ new /obj/item/book/manual/robotics_cyborgs(src)
+ update_icon()
+
+
+/obj/structure/bookcase/manuals/research_and_development
+ name = "\improper R&D manuals bookcase"
+
+/obj/structure/bookcase/manuals/research_and_development/New()
+ ..()
+ new /obj/item/book/manual/research_and_development(src)
+ update_icon()
+
+
+/*
+ * Book
+ */
+/obj/item/book
+ name = "book"
+ icon = 'icons/obj/library.dmi'
+ icon_state ="book"
+ desc = "Crack it open, inhale the musk of its pages, and learn something new."
+ throw_speed = 1
+ throw_range = 5
+ w_class = WEIGHT_CLASS_NORMAL //upped to three because books are, y'know, pretty big. (and you could hide them inside eachother recursively forever)
+ attack_verb = list("bashed", "whacked", "educated")
+ resistance_flags = FLAMMABLE
+ var/dat //Actual page content
+ var/due_date = 0 //Game time in 1/10th seconds
+ var/author //Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
+ var/unique = 0 //0 - Normal book, 1 - Should not be treated as normal book, unable to be copied, unable to be modified
+ var/title //The real name of the book.
+ var/window_size = null // Specific window size for the book, i.e: "1920x1080", Size x Width
+
+/obj/item/book/attack_self(mob/user)
+ if(is_blind(user))
+ to_chat(user, "As you are trying to read, you suddenly feel very stupid!")
+ return
+ if(ismonkey(user))
+ to_chat(user, "You skim through the book but can't comprehend any of it.")
+ return
+ if(dat)
+ user << browse("Penned by [author].
" + "[dat]", "window=book[window_size != null ? ";size=[window_size]" : ""]")
+ user.visible_message("[user] opens a book titled \"[title]\" and begins reading intently.")
+ onclose(user, "book")
+ else
+ to_chat(user, "This book is completely blank!")
+
+
+/obj/item/book/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/pen))
+ if(is_blind(user))
+ to_chat(user, " As you are trying to write on the book, you suddenly feel very stupid!")
+ return
+ if(unique)
+ to_chat(user, "These pages don't seem to take the ink well! Looks like you can't modify it.")
+ return
+ var/choice = input("What would you like to change?") in list("Title", "Contents", "Author", "Cancel")
+ switch(choice)
+ if("Title")
+ var/newtitle = reject_bad_text(stripped_input(usr, "Write a new title:"))
+ if (length(newtitle) > 20)
+ to_chat(usr, "That title won't fit on the cover!")
+ return
+ if(!newtitle)
+ to_chat(usr, "That title is invalid.")
+ return
+ else
+ name = newtitle
+ title = newtitle
+ if("Contents")
+ var/content = stripped_input(usr, "Write your book's contents (HTML NOT allowed):","","",8192)
+ if(!content)
+ to_chat(usr, "The content is invalid.")
+ return
+ else
+ dat += content
+ if("Author")
+ var/newauthor = stripped_input(usr, "Write the author's name:")
+ if(!newauthor)
+ to_chat(usr, "The name is invalid.")
+ return
+ else
+ author = newauthor
+ else
+ return
+
+ else if(istype(I, /obj/item/barcodescanner))
+ var/obj/item/barcodescanner/scanner = I
+ if(!scanner.computer)
+ to_chat(user, "[I]'s screen flashes: 'No associated computer found!'")
+ else
+ switch(scanner.mode)
+ if(0)
+ scanner.book = src
+ to_chat(user, "[I]'s screen flashes: 'Book stored in buffer.'")
+ if(1)
+ scanner.book = src
+ scanner.computer.buffer_book = name
+ to_chat(user, "[I]'s screen flashes: 'Book stored in buffer. Book title stored in associated computer buffer.'")
+ if(2)
+ scanner.book = src
+ for(var/datum/borrowbook/b in scanner.computer.checkouts)
+ if(b.bookname == name)
+ scanner.computer.checkouts.Remove(b)
+ to_chat(user, "[I]'s screen flashes: 'Book stored in buffer. Book has been checked in.'")
+ return
+ to_chat(user, "[I]'s screen flashes: 'Book stored in buffer. No active check-out record found for current title.'")
+ if(3)
+ scanner.book = src
+ for(var/obj/item/book in scanner.computer.inventory)
+ if(book == src)
+ to_chat(user, "[I]'s screen flashes: 'Book stored in buffer. Title already present in inventory, aborting to avoid duplicate entry.'")
+ return
+ scanner.computer.inventory.Add(src)
+ to_chat(user, "[I]'s screen flashes: 'Book stored in buffer. Title added to general inventory.'")
+
+ else if(istype(I, /obj/item/kitchen/knife) || istype(I, /obj/item/wirecutters))
+ to_chat(user, "You begin to carve out [title]...")
+ if(do_after(user, 30, target = src))
+ to_chat(user, "You carve out the pages from [title]! You didn't want to read it anyway.")
+ var/obj/item/storage/book/B = new
+ B.name = src.name
+ B.title = src.title
+ B.icon_state = src.icon_state
+ if(user.is_holding(src))
+ qdel(src)
+ user.put_in_hands(B)
+ return
+ else
+ B.loc = src.loc
+ qdel(src)
+ return
+ return
+ else
+ ..()
+
+
+/*
+ * Barcode Scanner
+ */
+/obj/item/barcodescanner
+ name = "barcode scanner"
+ icon = 'icons/obj/library.dmi'
+ icon_state ="scanner"
+ desc = "A fabulous tool if you need to scan a barcode."
+ throw_speed = 3
+ throw_range = 5
+ w_class = WEIGHT_CLASS_TINY
+ var/obj/machinery/computer/libraryconsole/bookmanagement/computer //Associated computer - Modes 1 to 3 use this
+ var/obj/item/book/book //Currently scanned book
+ var/mode = 0 //0 - Scan only, 1 - Scan and Set Buffer, 2 - Scan and Attempt to Check In, 3 - Scan and Attempt to Add to Inventory
+
+/obj/item/barcodescanner/attack_self(mob/user)
+ mode += 1
+ if(mode > 3)
+ mode = 0
+ to_chat(user, "[src] Status Display:")
+ var/modedesc
+ switch(mode)
+ if(0)
+ modedesc = "Scan book to local buffer."
+ if(1)
+ modedesc = "Scan book to local buffer and set associated computer buffer to match."
+ if(2)
+ modedesc = "Scan book to local buffer, attempt to check in scanned book."
+ if(3)
+ modedesc = "Scan book to local buffer, attempt to add book to general inventory."
+ else
+ modedesc = "ERROR"
+ to_chat(user, " - Mode [mode] : [modedesc]")
+ if(computer)
+ to_chat(user, "Computer has been associated with this unit.")
+ else
+ to_chat(user, "No associated computer found. Only local scans will function properly.")
+ to_chat(user, "\n")
+>>>>>>> 3e4d747... Adds desc to things lacking them. (#31086)
diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index 99127cd595..dc48bbae2d 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -20,6 +20,7 @@
icon_screen = "library"
icon_keyboard = null
circuit = /obj/item/circuitboard/computer/libraryconsole
+ desc = "Checked out books MUST be returned on time."
var/screenstate = 0
var/title
var/category = "Any"
@@ -161,6 +162,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums
// It's December 25th, 2014, and this is STILL here, and it's STILL relevant. Kill me
/obj/machinery/computer/libraryconsole/bookmanagement
name = "book inventory management console"
+ desc = "Librarian's command station."
var/arcanecheckout = 0
screenstate = 0 // 0 - Main Menu, 1 - Inventory, 2 - Checked Out, 3 - Check Out a Book
verb_say = "beeps"
@@ -498,6 +500,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums
name = "scanner control interface"
icon = 'icons/obj/library.dmi'
icon_state = "bigscanner"
+ desc = "It servers the purpose of scanning stuff."
anchored = TRUE
density = TRUE
var/obj/item/book/cache // Last scanned book
@@ -554,6 +557,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums
name = "book binder"
icon = 'icons/obj/library.dmi'
icon_state = "binder"
+ desc = "Only intended for binding paper products."
anchored = TRUE
density = TRUE
var/busy = FALSE
diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm
index 96589fb575..0c9bcdc170 100644
--- a/code/modules/mining/machine_stacking.dm
+++ b/code/modules/mining/machine_stacking.dm
@@ -4,6 +4,7 @@
name = "stacking machine console"
icon = 'icons/obj/machines/mining_machines.dmi'
icon_state = "console"
+ desc = "Controls a stacking machine... in theory."
density = FALSE
anchored = TRUE
var/obj/machinery/mineral/stacking_machine/machine = null
@@ -60,6 +61,7 @@
name = "stacking machine"
icon = 'icons/obj/machines/mining_machines.dmi'
icon_state = "stacker"
+ desc = "A machine that automatically stacks acquired materials. Controlled by a nearby console."
density = TRUE
anchored = TRUE
var/obj/machinery/mineral/stacking_unit_console/CONSOLE
@@ -90,4 +92,4 @@
var/obj/item/stack/sheet/out = new inp.type()
out.amount = stack_amt
unload_mineral(out)
- storage.amount -= stack_amt
\ No newline at end of file
+ storage.amount -= stack_amt
diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm
index 650eebba1a..0cef65c07c 100644
--- a/code/modules/research/message_server.dm
+++ b/code/modules/research/message_server.dm
@@ -67,6 +67,7 @@ GLOBAL_LIST_INIT(message_servers, list())
icon = 'icons/obj/machines/research.dmi'
icon_state = "server"
name = "Messaging Server"
+ desc = "A machine that attempts to gather the secret knowledge of the universe."
density = TRUE
anchored = TRUE
use_power = IDLE_POWER_USE
diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm
index 8384e978e5..47ceaef99e 100644
--- a/code/modules/shuttle/computer.dm
+++ b/code/modules/shuttle/computer.dm
@@ -1,5 +1,6 @@
/obj/machinery/computer/shuttle
name = "shuttle console"
+ desc = "A shuttle control computer."
icon_screen = "shuttle"
icon_keyboard = "tech_key"
light_color = LIGHT_COLOR_CYAN
diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm
index 5b27e562f3..07103088d1 100644
--- a/code/modules/shuttle/ferry.dm
+++ b/code/modules/shuttle/ferry.dm
@@ -1,5 +1,6 @@
/obj/machinery/computer/shuttle/ferry
name = "transport ferry console"
+ desc = "A console that controls the transport ferry."
circuit = /obj/item/circuitboard/computer/ferry
shuttleId = "ferry"
possible_destinations = "ferry_home;ferry_away"
diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm
index ac1339d33e..4574e62bd1 100644
--- a/code/modules/shuttle/syndicate.dm
+++ b/code/modules/shuttle/syndicate.dm
@@ -2,6 +2,7 @@
/obj/machinery/computer/shuttle/syndicate
name = "syndicate shuttle terminal"
+ desc = "The terminal used to control the syndicate transport shuttle."
circuit = /obj/item/circuitboard/computer/syndicate_shuttle
icon_screen = "syndishuttle"
icon_keyboard = "syndie_key"
@@ -13,6 +14,7 @@
/obj/machinery/computer/shuttle/syndicate/recall
name = "syndicate shuttle recall terminal"
+ desc = "Use this if your friends left you behind."
possible_destinations = "syndicate_away"
@@ -27,6 +29,7 @@
/obj/machinery/computer/shuttle/syndicate/drop_pod
name = "syndicate assault pod control"
+ desc = "Controls the drop pod's launch system."
icon = 'icons/obj/terminals.dmi'
icon_state = "dorm_available"
light_color = LIGHT_COLOR_BLUE