diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index fe252c3ab32..14c8b67f2be 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -248,7 +248,7 @@ Implants;
for (var/obj/machinery/computer/communications/comm in machines)
if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept)
var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc )
- intercept.name = "paper - 'Cent. Com. Status Summary'"
+ intercept.name = "Cent. Com. Status Summary"
intercept.info = intercepttext
comm.messagetitle.Add("Cent. Com. Status Summary")
diff --git a/code/game/gamemodes/revolution/rp-revolution.dm b/code/game/gamemodes/revolution/rp-revolution.dm
index 963579af7c8..2fdf8af27c7 100644
--- a/code/game/gamemodes/revolution/rp-revolution.dm
+++ b/code/game/gamemodes/revolution/rp-revolution.dm
@@ -45,7 +45,7 @@
for (var/obj/machinery/computer/communications/comm in world)
if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept)
var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc )
- intercept.name = "paper - 'Cent. Com. Status Summary'"
+ intercept.name = "Cent. Com. Status Summary"
intercept.info = intercepttext
comm.messagetitle.Add("Cent. Com. Status Summary")
@@ -116,7 +116,7 @@
for (var/obj/machinery/computer/communications/comm in world)
if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept)
var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc )
- intercept.name = "paper - 'Cent. Com. Status Summary'"
+ intercept.name = "Cent. Com. Status Summary"
intercept.info = intercepttext
comm.messagetitle.Add("Cent. Com. Status Summary")
@@ -134,7 +134,7 @@
for (var/obj/machinery/computer/communications/comm in world)
if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept)
var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc )
- intercept.name = "paper - 'Cent. Com. Status Summary'"
+ intercept.name = "Cent. Com. Status Summary"
intercept.info = intercepttext
comm.messagetitle.Add("Cent. Com. Status Summary")
diff --git a/code/game/gamemodes/revolution/rp_revolution.dm b/code/game/gamemodes/revolution/rp_revolution.dm
index 70fd1387f04..71c34c0d04e 100644
--- a/code/game/gamemodes/revolution/rp_revolution.dm
+++ b/code/game/gamemodes/revolution/rp_revolution.dm
@@ -248,7 +248,7 @@
for (var/obj/machinery/computer/communications/comm in world)
if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept)
var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc )
- intercept.name = "paper - 'Cent. Com. Announcement'"
+ intercept.name = "Cent. Com. Announcement"
intercept.info = message
comm.messagetitle.Add("Cent. Com. Announcement")
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 4361460980f..5b940300662 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -433,7 +433,7 @@
*/
/obj/item/weapon/paper/Cloning
- name = "paper - 'H-87 Cloning Apparatus Manual"
+ name = "H-87 Cloning Apparatus Manual"
info = {"
Getting Started
Congratulations, your station has purchased the H-87 industrial cloning device!
Using the H-87 is almost as simple as brain surgery! Simply insert the target humanoid into the scanning chamber and select the scan option to create a new profile!
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index c47eb1f9136..b289bcaa205 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -95,6 +95,11 @@
stat |= BROKEN
update_icon()
+/obj/machinery/computer/proc/decode(text)
+ // Adds line breaks
+ text = replacetext(text, "\n", "
")
+ return text
+
/obj/machinery/computer/attackby(I as obj, user as mob)
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index 37cdd7deb6b..b9c821e18ea 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -78,7 +78,7 @@
else
dat += "General Record Lost!
"
if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2)))
- dat += text("
\nMedical Data
\nBlood Type: []
\nDNA: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\nComments/Log
", src, src.active2.fields["b_type"], src, src.active2.fields["b_dna"], src, src.active2.fields["mi_dis"], src, src.active2.fields["mi_dis_d"], src, src.active2.fields["ma_dis"], src, src.active2.fields["ma_dis_d"], src, src.active2.fields["alg"], src, src.active2.fields["alg_d"], src, src.active2.fields["cdi"], src, src.active2.fields["cdi_d"], src, src.active2.fields["notes"])
+ dat += text("
\nMedical Data
\nBlood Type: []
\nDNA: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\nComments/Log
", src, src.active2.fields["b_type"], src, src.active2.fields["b_dna"], src, src.active2.fields["mi_dis"], src, src.active2.fields["mi_dis_d"], src, src.active2.fields["ma_dis"], src, src.active2.fields["ma_dis_d"], src, src.active2.fields["alg"], src, src.active2.fields["alg_d"], src, src.active2.fields["cdi"], src, src.active2.fields["cdi_d"], src, decode(src.active2.fields["notes"]))
var/counter = 1
while(src.active2.fields[text("com_[]", counter)])
dat += text("[]
Delete Entry
", src.active2.fields[text("com_[]", counter)], src, counter)
@@ -302,7 +302,7 @@
src.active2.fields["cdi_d"] = t1
if("notes")
if (istype(src.active2, /datum/data/record))
- var/t1 = copytext(sanitize(input("Please summarize notes:", "Med. records", src.active2.fields["notes"], null) as message),1,MAX_MESSAGE_LEN)
+ var/t1 = copytext(html_encode(input("Please summarize notes:", "Med. records", html_decode(src.active2.fields["notes"]), null) as message),1,MAX_MESSAGE_LEN)
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
return
src.active2.fields["notes"] = t1
@@ -487,7 +487,7 @@
P.info += "General Record Lost!
"
P.name = "Medical Record"
if (record2)
- P.info += text("
\nMedical Data
\nBlood Type: []
\nDNA: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\nComments/Log
", record2.fields["b_type"], record2.fields["b_dna"], record2.fields["mi_dis"], record2.fields["mi_dis_d"], record2.fields["ma_dis"], record2.fields["ma_dis_d"], record2.fields["alg"], record2.fields["alg_d"], record2.fields["cdi"], record2.fields["cdi_d"], record2.fields["notes"])
+ P.info += text("
\nMedical Data
\nBlood Type: []
\nDNA: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\nComments/Log
", record2.fields["b_type"], record2.fields["b_dna"], record2.fields["mi_dis"], record2.fields["mi_dis_d"], record2.fields["ma_dis"], record2.fields["ma_dis_d"], record2.fields["alg"], record2.fields["alg_d"], record2.fields["cdi"], record2.fields["cdi_d"], decode(record2.fields["notes"]))
var/counter = 1
while(record2.fields[text("com_[]", counter)])
P.info += text("[]
", record2.fields[text("com_[]", counter)])
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 129c6772012..5cbd9bde9c2 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -125,7 +125,7 @@
else
dat += "General Record Lost!
"
if ((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
- dat += text("
\nSecurity Data
\nCriminal Status: []
\n
\nMinor Crimes: []
\nDetails: []
\n
\nMajor Crimes: []
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\nComments/Log
", src, active2.fields["criminal"], src, active2.fields["mi_crim"], src, active2.fields["mi_crim_d"], src, active2.fields["ma_crim"], src, active2.fields["ma_crim_d"], src, active2.fields["notes"])
+ dat += text("
\nSecurity Data
\nCriminal Status: []
\n
\nMinor Crimes: []
\nDetails: []
\n
\nMajor Crimes: []
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\nComments/Log
", src, active2.fields["criminal"], src, active2.fields["mi_crim"], src, active2.fields["mi_crim_d"], src, active2.fields["ma_crim"], src, active2.fields["ma_crim_d"], src, decode(active2.fields["notes"]))
var/counter = 1
while(active2.fields[text("com_[]", counter)])
dat += text("[]
Delete Entry
", active2.fields[text("com_[]", counter)], src, counter)
@@ -345,7 +345,7 @@ What a mess.*/
P.info += "General Record Lost!
"
P.name = "Security Record"
if (record2)
- P.info += text("
\nSecurity Data
\nCriminal Status: []
\n
\nMinor Crimes: []
\nDetails: []
\n
\nMajor Crimes: []
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\nComments/Log
", record2.fields["criminal"], record2.fields["mi_crim"], record2.fields["mi_crim_d"], record2.fields["ma_crim"], record2.fields["ma_crim_d"], record2.fields["notes"])
+ P.info += text("
\nSecurity Data
\nCriminal Status: []
\n
\nMinor Crimes: []
\nDetails: []
\n
\nMajor Crimes: []
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\nComments/Log
", record2.fields["criminal"], record2.fields["mi_crim"], record2.fields["mi_crim_d"], record2.fields["ma_crim"], record2.fields["ma_crim_d"], decode(record2.fields["notes"]))
var/counter = 1
while(record2.fields[text("com_[]", counter)])
P.info += text("[]
", record2.fields[text("com_[]", counter)])
@@ -488,7 +488,7 @@ What a mess.*/
active2.fields["ma_crim_d"] = t1
if("notes")
if (istype(active2, /datum/data/record))
- var/t1 = copytext(sanitize(input("Please summarize notes:", "Secure. records", active2.fields["notes"], null) as message),1,MAX_MESSAGE_LEN)
+ var/t1 = copytext(html_encode(input("Please summarize notes:", "Secure. records", html_decode(active2.fields["notes"]), null) as message),1,MAX_MESSAGE_LEN)
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || active2 != a2))
return
active2.fields["notes"] = t1
diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm
index 3068d993011..27360e963e2 100644
--- a/code/game/machinery/computer/skills.dm
+++ b/code/game/machinery/computer/skills.dm
@@ -100,7 +100,7 @@
Fingerprint: [active1.fields["fingerprint"]]
\n \
Physical Status: [active1.fields["p_stat"]]
\n \
Mental Status: [active1.fields["m_stat"]]
\n \
- Employment/skills summary:
[active1.fields["notes"]]
\
+ Employment/skills summary:
[decode(active1.fields["notes"])]
\
Photo:
\
 | ")
else
@@ -275,11 +275,11 @@ What a mess.*/
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc )
P.info = "Employment Record
"
if ((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
- P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
\nEmployment/Skills Summary:[]
", active1.fields["name"], active1.fields["id"], active1.fields["sex"], active1.fields["age"], active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"], active1.fields["notes"])
+ P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
\nEmployment/Skills Summary:
\n[]
", active1.fields["name"], active1.fields["id"], active1.fields["sex"], active1.fields["age"], active1.fields["fingerprint"], active1.fields["p_stat"], active1.fields["m_stat"], decode(active1.fields["notes"]))
else
P.info += "General Record Lost!
"
P.info += ""
- P.name = "paper - 'Employment Record'"
+ P.name = "Employment Record ([active1.fields["name"]])"
printing = null
//RECORD DELETE
if ("Delete All Records")
@@ -302,7 +302,7 @@ What a mess.*/
temp += "No"
//RECORD CREATE
if ("New Record (General)")
-
+
if(PDA_Manifest.len)
PDA_Manifest.Cut()
var/datum/data/record/G = new /datum/data/record()
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
index eaeba38e43f..3abf6d61d3b 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
@@ -95,3 +95,25 @@
else
user << "\red Access Denied"
return
+
+/obj/structure/closet/secure_closet/personal/verb/reset()
+ set src in oview(1) // One square distance
+ set category = "Object"
+ set name = "Reset Lock"
+ if(!usr.canmove || usr.stat || usr.restrained()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain
+ return
+ if(ishuman(usr))
+ src.add_fingerprint(usr)
+ if (src.locked || !src.registered_name)
+ usr << "\red You need to unlock it first."
+ else if (src.broken)
+ usr << "\red It appears to be broken."
+ else
+ if (src.opened)
+ if(!src.close())
+ return
+ src.locked = 1
+ src.icon_state = src.icon_locked
+ src.registered_name = null
+ src.desc = "It's a secure locker for personnel. The first card swiped gains control."
+ return
\ No newline at end of file
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 9ec56f1fc94..978b055fd76 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -220,7 +220,7 @@ BLIND // can't see anything
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen)
slowdown = 3
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9
@@ -252,7 +252,7 @@ BLIND // can't see anything
if(hastie)
hastie.attackby(I, user)
return
-
+
if(!hastie && istype(I, /obj/item/clothing/tie))
user.drop_item()
hastie = I
@@ -265,7 +265,7 @@ BLIND // can't see anything
return
..()
-
+
/obj/item/clothing/under/attack_hand(mob/user as mob)
//only forward to the attached accessory if the clothing is equipped (not in a storage)
if(hastie && src.loc == user)
@@ -279,7 +279,7 @@ BLIND // can't see anything
//makes sure that the clothing is equipped so that we can't drag it into our hand from miles away.
if (!(src.loc == usr))
return
-
+
if (!( usr.restrained() ) && !( usr.stat ))
switch(over_object.name)
if("r_hand")
@@ -307,13 +307,10 @@ BLIND // can't see anything
if(hastie)
usr << "\A [hastie] is clipped to it."
-/obj/item/clothing/under/verb/toggle()
- set name = "Toggle Suit Sensors"
- set category = "Object"
- set src in usr
+/obj/item/clothing/under/proc/set_sensors(mob/usr as mob)
var/mob/M = usr
if (istype(M, /mob/dead/)) return
- if (usr.stat) return
+ if (usr.stat || usr.restrained()) return
if(has_sensor >= 2)
usr << "The controls are locked."
return 0
@@ -323,17 +320,41 @@ BLIND // can't see anything
var/list/modes = list("Off", "Binary sensors", "Vitals tracker", "Tracking beacon")
var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes
+ if(get_dist(usr, src) > 1)
+ usr << "You have moved too far away."
+ return
sensor_mode = modes.Find(switchMode) - 1
- switch(sensor_mode)
- if(0)
- usr << "You disable your suit's remote sensing equipment."
- if(1)
- usr << "Your suit will now report whether you are live or dead."
- if(2)
- usr << "Your suit will now report your vital lifesigns."
- if(3)
- usr << "Your suit will now report your vital lifesigns as well as your coordinate position."
+ if (src.loc == usr)
+ switch(sensor_mode)
+ if(0)
+ usr << "You disable your suit's remote sensing equipment."
+ if(1)
+ usr << "Your suit will now report whether you are live or dead."
+ if(2)
+ usr << "Your suit will now report your vital lifesigns."
+ if(3)
+ usr << "Your suit will now report your vital lifesigns as well as your coordinate position."
+ else if (istype(src.loc, /mob))
+ switch(sensor_mode)
+ if(0)
+ for(var/mob/V in viewers(usr, 1))
+ V.show_message("\red [usr] disables [src.loc]'s remote sensing equipment.", 1)
+ if(1)
+ for(var/mob/V in viewers(usr, 1))
+ V.show_message("[usr] turns [src.loc]'s remote sensors to binary.", 1)
+ if(2)
+ for(var/mob/V in viewers(usr, 1))
+ V.show_message("[usr] sets [src.loc]'s sensors to track vitals.", 1)
+ if(3)
+ for(var/mob/V in viewers(usr, 1))
+ V.show_message("[usr] sets [src.loc]'s sensors to maximum.", 1)
+
+/obj/item/clothing/under/verb/toggle()
+ set name = "Toggle Suit Sensors"
+ set category = "Object"
+ set src in usr
+ set_sensors(usr)
..()
/obj/item/clothing/under/verb/rollsuit()
@@ -354,7 +375,7 @@ BLIND // can't see anything
/obj/item/clothing/under/proc/remove_accessory(mob/user as mob)
if(!hastie)
return
-
+
hastie.on_removed(user)
hastie = null
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 9f5289c43ff..f17bb061d9c 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -398,6 +398,9 @@
/mob/living/carbon/human/show_inv(mob/user as mob)
+ var/obj/item/clothing/under/suit = null
+ if (istype(w_uniform, /obj/item/clothing/under))
+ suit = w_uniform
user.set_machine(src)
var/dat = {"
@@ -412,21 +415,22 @@
Right Ear: [(r_ear ? r_ear : "Nothing")]
Head: [(head ? head : "Nothing")]
Shoes: [(shoes ? shoes : "Nothing")]
-
Belt: [(belt ? belt : "Nothing")]
-
Uniform: [(w_uniform ? w_uniform : "Nothing")]
+
Belt: [(belt ? belt : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(belt, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")]
+
Uniform: [(w_uniform ? w_uniform : "Nothing")] [(suit) ? ((suit.has_sensor == 1) ? text(" Sensors", src) : "") :]
(Exo)Suit: [(wear_suit ? wear_suit : "Nothing")]
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")]
ID: [(wear_id ? wear_id : "Nothing")]
-
Suit Storage: [(s_store ? s_store : "Nothing")]
+
Suit Storage: [(s_store ? s_store : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(s_store, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")]
[(handcuffed ? text("Handcuffed") : text("Not Handcuffed"))]
[(legcuffed ? text("Legcuffed") : text(""))]
+
[(suit) ? ((suit.hastie) ? text(" Remove Accessory", src) : "") :]
[(internal ? text("Remove Internal") : "")]
Remove Splints
Empty Pockets
Refresh
Close
"}
- user << browse(dat, text("window=mob[name];size=340x480"))
+ user << browse(dat, text("window=mob[name];size=340x540"))
onclose(user, "mob[name]")
return
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 64d1ff64ef3..06dd4d6b0b2 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -388,11 +388,14 @@
if(count == 0)
del(src)
return
+ if("sensor")
+ if (! target.w_uniform )
+ del(src)
if("internal")
if ((!( (istype(target.wear_mask, /obj/item/clothing/mask) && istype(target.back, /obj/item/weapon/tank) && !( target.internal )) ) && !( target.internal )))
del(src)
- var/list/L = list( "syringe", "pill", "drink", "dnainjector", "fuel")
+ var/list/L = list( "syringe", "pill", "drink", "dnainjector", "fuel", "sensor", "internal", "tie")
if ((item && !( L.Find(place) )))
if(isrobot(source) && place != "handcuff")
del(src)
@@ -508,6 +511,17 @@
return
else
message = "\red [source] is trying to take off \a [target.w_uniform] from [target]'s body!"
+ if("tie")
+ var/obj/item/clothing/under/suit = target.w_uniform
+ target.attack_log += text("\[[time_stamp()]\] Has had their accessory ([suit.hastie]) removed by [source.name] ([source.ckey])")
+ source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) accessory ([suit.hastie])")
+ if(istype(suit.hastie, /obj/item/clothing/tie/holobadge) || istype(suit.hastie, /obj/item/clothing/tie/medal))
+ for(var/mob/M in viewers(target, null))
+ M.show_message("\red [source] tears off \the [suit.hastie] from [target]'s suit!" , 1)
+ done()
+ return
+ else
+ message = "\red [source] is trying to take off \a [suit.hastie] from [target]'s suit!"
if("s_store")
target.attack_log += text("\[[time_stamp()]\] Has had their suit storage item ([target.s_store]) removed by [source.name] ([source.ckey])")
source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) suit storage item ([target.s_store])")
@@ -537,6 +551,14 @@
message = "\red [source] is trying to set on [target]'s internals."
if("splints")
message = text("\red [] is trying to remove []'s splints!", source, target)
+ if("sensor")
+ target.attack_log += text("\[[time_stamp()]\] Has had their sensors toggled by [source.name] ([source.ckey])")
+ source.attack_log += text("\[[time_stamp()]\] Attempted to toggle [target.name]'s ([target.ckey]) sensors")
+ var/obj/item/clothing/under/suit = target.w_uniform
+ if (suit.has_sensor >= 2)
+ source << "The controls are locked."
+ return
+ message = "\red [source] is trying to set [target]'s suit sensors!"
for(var/mob/M in viewers(target, null))
M.show_message(message, 1)
@@ -624,6 +646,19 @@ It can still be worn/put on as normal.
slot_to_process = slot_wear_suit
if (target.wear_suit && target.wear_suit.canremove)
strip_item = target.wear_suit
+ if("tie")
+ var/obj/item/clothing/under/suit = target.w_uniform
+ //var/obj/item/clothing/tie/tie = suit.hastie
+ /*if(tie)
+ if (istype(tie,/obj/item/clothing/tie/storage))
+ var/obj/item/clothing/tie/storage/W = tie
+ if (W.hold)
+ W.hold.close(usr)
+ usr.put_in_hands(tie)
+ suit.hastie = null*/
+ suit.hastie.on_removed(usr)
+ suit.hastie = null
+ target.update_inv_w_uniform()
if("id")
slot_to_process = slot_wear_id
if (target.wear_id)
@@ -675,8 +710,20 @@ It can still be worn/put on as normal.
O.show_message("\red [source] injects [target] with the DNA Injector!", 1)
S.inuse = 0
if("pockets")
- slot_to_process = slot_l_store
- strip_item = target.l_store //We'll do both
+ if (!item || (target.l_store && target.r_store)) // Only empty pockets when hand is empty or both pockets are full
+ slot_to_process = slot_l_store
+ strip_item = target.l_store //We'll do both
+ else if (target.l_store)
+ slot_to_process = slot_r_store
+ else
+ slot_to_process = slot_l_store
+ if("sensor")
+ var/obj/item/clothing/under/suit = target.w_uniform
+ if (suit)
+ if(suit.has_sensor >= 2)
+ source << "The controls are locked."
+ else
+ suit.set_sensors(source)
if("internal")
if (target.internal)
target.internal.add_fingerprint(source)
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
index aeb6851145e..1dd51443fb4 100644
--- a/code/modules/paperwork/filingcabinet.dm
+++ b/code/modules/paperwork/filingcabinet.dm
@@ -121,7 +121,7 @@
P.info += "[S.fields["com_[counter]"]]
"
counter++
P.info += ""
- P.name = "paper - '[G.fields["name"]]'"
+ P.name = "Security Record ([G.fields["name"]])"
virgin = 0 //tabbing here is correct- it's possible for people to try and use it
//before the records have been generated, so we do this inside the loop.
..()
@@ -157,7 +157,7 @@
P.info += "[M.fields["com_[counter]"]]
"
counter++
P.info += ""
- P.name = "paper - '[G.fields["name"]]'"
+ P.name = "Medical Record ([G.fields["name"]])"
virgin = 0 //tabbing here is correct- it's possible for people to try and use it
//before the records have been generated, so we do this inside the loop.
..()
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 4fec2ee842a..7e16c426dbb 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -316,25 +316,45 @@
clown = 1
if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/photo))
+ if (istype(P, /obj/item/weapon/paper/carbon))
+ var/obj/item/weapon/paper/carbon/C = P
+ if (!C.iscopy && !C.copied)
+ user << "Take off the carbon copy first."
+ add_fingerprint(user)
+ return
var/obj/item/weapon/paper_bundle/B = new(src.loc)
if (name != "paper")
B.name = name
else if (P.name != "paper" && P.name != "photo")
B.name = P.name
user.drop_from_inventory(P)
- if (user.r_hand == src)
- user.drop_from_inventory(src)
- B.loc = user
- user.r_hand = B
- B.layer = 20
- else if (user.l_hand == src)
- user.drop_from_inventory(src)
- B.loc = user
- user.l_hand = B
- B.layer = 20
- if(istype(user,/mob/living/carbon/human))
- user:update_inv_l_hand()
- user:update_inv_r_hand()
+ if (istype(user, /mob/living/carbon/human))
+ var/mob/living/carbon/human/h_user = user
+ if (h_user.r_hand == src)
+ h_user.drop_from_inventory(src)
+ h_user.put_in_r_hand(B)
+ else if (h_user.l_hand == src)
+ h_user.drop_from_inventory(src)
+ h_user.put_in_l_hand(B)
+ else if (h_user.l_store == src)
+ h_user.drop_from_inventory(src)
+ B.loc = h_user
+ B.layer = 20
+ h_user.l_store = B
+ h_user.update_inv_pockets()
+ else if (h_user.r_store == src)
+ h_user.drop_from_inventory(src)
+ B.loc = h_user
+ B.layer = 20
+ h_user.r_store = B
+ h_user.update_inv_pockets()
+ else if (h_user.head == src)
+ h_user.u_equip(src)
+ h_user.put_in_hands(B)
+ else if (!istype(src.loc, /turf))
+ src.loc = get_turf(h_user)
+ if(h_user.client) h_user.client.screen -= src
+ h_user.put_in_hands(B)
user << "You clip the [P.name] to [(src.name == "paper") ? "the paper" : src.name]."
src.loc = B
P.loc = B
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index 8ede4c9ed1b..da9a3e150ef 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -21,6 +21,13 @@
var/obj/item/weapon/paper/P
if(istype(W, /obj/item/weapon/paper))
P = W
+ if (istype(P, /obj/item/weapon/paper/carbon))
+ var/obj/item/weapon/paper/carbon/C = P
+ if (!C.iscopy && !C.copied)
+ user << "Take off the carbon copy first."
+ add_fingerprint(user)
+ return
+
amount++
if(screen == 2)
screen = 1
@@ -37,9 +44,18 @@
user << "You add [(W.name == "photo") ? "the photo" : W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name]."
user.drop_from_inventory(W)
W.loc = src
- if(istype(user,/mob/living/carbon/human))
- user:update_inv_l_hand()
- user:update_inv_r_hand()
+ else if(istype(W, /obj/item/weapon/lighter))
+ burnpaper(W, user)
+ else if(istype(W, /obj/item/weapon/paper_bundle))
+ user.drop_from_inventory(W)
+ for(var/obj/O in W)
+ O.loc = src
+ O.add_fingerprint(usr)
+ src.amount++
+ if(screen == 2)
+ screen = 1
+ user << "You add \the [W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name]."
+ del(W)
else
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/toy/crayon))
usr << browse("", "window=[name]") //Closes the dialog
@@ -50,6 +66,31 @@
return
+/obj/item/weapon/paper_bundle/proc/burnpaper(obj/item/weapon/lighter/P, mob/user)
+ var/class = ""
+
+ if(P.lit && !user.restrained())
+ if(istype(P, /obj/item/weapon/lighter/zippo))
+ class = ""
+
+ user.visible_message("[class][user] holds \the [P] up to \the [src], it looks like \he's trying to burn it!", \
+ "[class]You hold \the [P] up to \the [src], burning it slowly.")
+
+ spawn(20)
+ if(get_dist(src, user) < 2 && user.get_active_hand() == P && P.lit)
+ user.visible_message("[class][user] burns right through \the [src], turning it to ash. It flutters through the air before settling on the floor in a heap.", \
+ "[class]You burn right through \the [src], turning it to ash. It flutters through the air before settling on the floor in a heap.")
+
+ if(user.get_inactive_hand() == src)
+ user.drop_from_inventory(src)
+
+ new /obj/effect/decal/cleanable/ash(src.loc)
+ del(src)
+
+ else
+ user << "\red You must hold \the [P] steady to burn \the [src]."
+
+
/obj/item/weapon/paper_bundle/examine()
set src in oview(1)
@@ -103,7 +144,7 @@
/obj/item/weapon/paper_bundle/Topic(href, href_list)
..()
- if((src in usr.contents) || (src.loc in usr.contents))
+ if((src in usr.contents) || (istype(src.loc, /obj/item/weapon/folder) && (src.loc in usr.contents)))
usr.set_machine(src)
if(href_list["next_page"])
if(page == amount)
@@ -125,44 +166,18 @@
playsound(src.loc, "pageturn", 50, 1)
if(href_list["remove"])
var/obj/item/weapon/W = src[page]
- W.loc = usr.loc
- if(istype(usr,/mob/living/carbon))
- //Place the item in the user's hand if possible
- if(!usr.r_hand)
- W.loc = usr
- usr.r_hand = W
- W.layer = 20
- else if(!usr.l_hand)
- W.loc = usr
- usr.l_hand = W
- W.layer = 20
+ usr.put_in_hands(W)
usr << "You remove the [W.name] from the bundle."
-
if(amount == 1)
var/obj/item/weapon/paper/P = src[1]
- P.loc = usr.loc
- if (usr.r_hand == src)
- usr.drop_from_inventory(src)
- P.loc = usr
- usr.r_hand = P
- P.layer = 20
- else if (usr.l_hand == src)
- usr.drop_from_inventory(src)
- P.loc = usr
- usr.l_hand = P
- P.layer = 20
- if(istype(usr,/mob/living/carbon/human))
- usr:update_inv_l_hand()
- usr:update_inv_r_hand()
+ usr.drop_from_inventory(src)
+ usr.put_in_hands(P)
del(src)
else if(page == amount)
screen = 2
else if(page == amount+1)
page--
- if(istype(usr,/mob/living/carbon/human))
- usr:update_inv_l_hand()
- usr:update_inv_r_hand()
amount--
update_icon()
else
@@ -193,10 +208,9 @@
usr << "You loosen the bundle."
for(var/obj/O in src)
O.loc = usr.loc
+ O.layer = initial(O.layer)
+ O.add_fingerprint(usr)
usr.drop_from_inventory(src)
- if(istype(usr,/mob/living/carbon/human))
- usr:update_inv_l_hand()
- usr:update_inv_r_hand()
del(src)
return
@@ -220,7 +234,6 @@
i++
else if(istype(O, /obj/item/weapon/photo))
var/obj/item/weapon/photo/Ph = O
-// img.icon_state = "photo"
img = Ph.tiny
photo = 1
overlays += img
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 1b02d2d7eb1..2321d7587d1 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -223,14 +223,18 @@
var/obj/item/weapon/photo/p = new /obj/item/weapon/photo (src.loc)
var/icon/I = icon(photocopy.icon, photocopy.icon_state)
var/icon/img = icon(photocopy.img)
+ var/icon/tiny = icon(photocopy.tiny)
if(toner > 10) //plenty of toner, go straight greyscale
I.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) //I'm not sure how expensive this is, but given the many limitations of photocopying, it shouldn't be an issue.
img.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
+ tiny.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
else //not much toner left, lighten the photo
I.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(100,100,100))
img.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(100,100,100))
+ tiny.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(100,100,100))
p.icon = I
p.img = img
+ p.tiny = tiny
p.name = photocopy.name
p.desc = photocopy.desc
p.scribble = photocopy.scribble
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index 00d5dc2b958..3656d550907 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -68,7 +68,7 @@
var/n_name = copytext(sanitize(input(usr, "What would you like to label the photo?", "Photo Labelling", null) as text), 1, MAX_NAME_LEN)
//loc.loc check is for making possible renaming photos in clipboards
if(( (loc == usr || (loc.loc && loc.loc == usr)) && usr.stat == 0))
- name = "photo[(n_name ? text("- '[n_name]'") : null)]"
+ name = "[(n_name ? text("[n_name]") : "photo")]"
add_fingerprint(usr)
return
diff --git a/code/unused/computer2/peripherals.dm b/code/unused/computer2/peripherals.dm
index 9e19cb9d236..1e6ff79e8b9 100644
--- a/code/unused/computer2/peripherals.dm
+++ b/code/unused/computer2/peripherals.dm
@@ -110,7 +110,7 @@
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.host.loc )
P.info = print_data
if(print_title)
- P.name = "paper - '[print_title]'"
+ P.name = "[print_title]"
src.printing = 0
return
diff --git a/html/changelog.html b/html/changelog.html
index 00e5e6a5f41..aad9533a692 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -54,7 +54,33 @@ should be listed in the changelog upon commit though. Thanks. -->
-
+
+
+
+
23 Mai 2014
+
Hubble updated:
+
+ - Personal lockers are now resettable
+ - Take off people's accessories or change their sensors in the drag and drop-interface
+ - Merge paper bundles by hitting one with another
+ - Line breaks in Security, Medical and Employment Records
+ - Record printouts will have names on it
+ - Set other people's internals in belt and suit storage slots
+ - No longer changing suit sensors while cuffed
+ - No longer emptying other people's pockets when they are not full yet
+
+
+
+
+
+
6 Mai 2014
+
Hubble updated:
+
+ - Clip papers together by hitting a paper with a paper or photo
+ - Adds icons for copied stamps
+
+
+
diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi
index 3c6d52748c6..b4426508926 100644
Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ