diff --git a/COPYING b/COPYING
index 5005fcd90f..77e1d829ff 100644
--- a/COPYING
+++ b/COPYING
@@ -1,5 +1,5 @@
Baystation12
-Copyright (C) 2010-2013 Baystation12 and tgstation13.
+Copyright (C) 2010-2014 Baystation12 and tgstation13.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm
index c66842d592..e8ab7b6efb 100644
--- a/code/game/machinery/bots/cleanbot.dm
+++ b/code/game/machinery/bots/cleanbot.dm
@@ -54,6 +54,8 @@
src.botcard = new /obj/item/weapon/card/id(src)
var/datum/job/janitor/J = new/datum/job/janitor
src.botcard.access = J.get_access()
+
+ src.locked = 0 // Start unlocked so roboticist can set them to patrol.
if(radio_controller)
radio_controller.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS)
diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm
index d94d4670be..0b999cb0bb 100644
--- a/code/game/objects/effects/decals/Cleanable/misc.dm
+++ b/code/game/objects/effects/decals/Cleanable/misc.dm
@@ -41,7 +41,7 @@
icon_state = "dirt"
/obj/effect/decal/cleanable/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W,/obj/item/weapon/crowbar))
+ if(!istype(W,/obj/item/weapon/mop) && !istype(W,/obj/item/weapon/soap))
var/turf/T = get_turf(src)
if(T)
T.attackby(W,user)
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 213702f3c8..5a250982d2 100755
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -951,10 +951,9 @@ var/global/list/obj/item/device/pda/PDAs = list()
else
//Basic safety check. If either both objects are held by user or PDA is on ground and card is in hand.
if(((src in user.contents) && (C in user.contents)) || (istype(loc, /turf) && in_range(src, user) && (C in user.contents)) )
- if( can_use(user) )//If they can still act.
- id_check(user, 2)
- user << "You put the ID into \the [src]'s slot."
- updateSelfDialog()//Update self dialog on success.
+ id_check(user, 2)
+ user << "You put the ID into \the [src]'s slot."
+ updateSelfDialog()//Update self dialog on success.
return //Return in case of failed check or when successful.
updateSelfDialog()//For the non-input related code.
else if(istype(C, /obj/item/device/paicard) && !src.pai)
diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm
index db9cd2129c..acf6c887d7 100644
--- a/code/modules/mob/dead/observer/say.dm
+++ b/code/modules/mob/dead/observer/say.dm
@@ -1,5 +1,5 @@
/mob/dead/observer/say(var/message)
- message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
+ message = trim(copytext(message, 1, MAX_MESSAGE_LEN))
if (!message)
return
@@ -18,7 +18,7 @@
/mob/dead/observer/emote(var/act, var/type, var/message)
- message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
+ message = trim(copytext(message, 1, MAX_MESSAGE_LEN))
if(!message)
return
@@ -62,4 +62,4 @@
M.show_message("You hear muffled speech... you can almost make out some words...", 2)
// M.show_message("[stutter(message)]", 2)
playsound(src.loc, pick('sound/effects/ghost.ogg','sound/effects/ghost2.ogg'), 10, 1)
-*/
\ No newline at end of file
+*/
diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm
index 416528d3fc..8a9f2a3b90 100644
--- a/code/modules/mob/emote.dm
+++ b/code/modules/mob/emote.dm
@@ -36,11 +36,15 @@
M.show_message(message)
+ // Type 1 (Visual) emotes are sent to anyone in view of the item
if (m_type & 1)
for (var/mob/O in viewers(src, null))
O.show_message(message, m_type)
+
+ // Type 2 (Audible) emotes are sent to anyone in hear range
+ // of the *LOCATION* -- this is important for pAIs to be heard
else if (m_type & 2)
- for (var/mob/O in hearers(src.loc, null))
+ for (var/mob/O in hearers(get_turf(src), null))
O.show_message(message, m_type)
/mob/proc/emote_dead(var/message)
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 863708d18c..02c8ea0422 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -4,6 +4,7 @@
icon_state = "shadow"
robot_talk_understand = 0
+ emote_type = 2 // pAIs emotes are heard, not seen, so they can be seen through a container (eg. person)
var/network = "SS13"
var/obj/machinery/camera/current = null
@@ -268,4 +269,4 @@
pai.key = src.key
card.setPersonality(pai)
-*/
\ No newline at end of file
+*/
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index ab6d621487..612b2c6a06 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -89,6 +89,7 @@
var/list/languages = list() // For speaking/listening.
var/list/abilities = list() // For species-derived or admin-given powers.
var/list/speak_emote = list("says") // Verbs used when speaking. Defaults to 'say' if speak_emote is null.
+ var/emote_type = 1 // Define emote default type, 1 for seen emotes, 2 for heard emotes
var/name_archive //For admin things like possession
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index 040c1615c5..1f2d5c2845 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -25,7 +25,7 @@
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
if(use_me)
- usr.emote("me",1,message)
+ usr.emote("me",usr.emote_type,message)
else
usr.emote(message)