diff --git a/code/game/objects/closets.dm b/code/game/objects/closets.dm
index 03362e2c2ba..7c1fdd906e2 100644
--- a/code/game/objects/closets.dm
+++ b/code/game/objects/closets.dm
@@ -17,6 +17,10 @@
return 1
/obj/structure/closet/proc/dump_contents()
+ //Cham Projector Exception
+ for(var/obj/effect/dummy/chameleon/AD in src)
+ AD.loc = src.loc
+
for(var/obj/item/I in src)
I.loc = src.loc
@@ -52,6 +56,13 @@
var/itemcount = 0
+ //Cham Projector Exception
+ for(var/obj/effect/dummy/chameleon/AD in src.loc)
+ if(itemcount >= storage_capacity)
+ break
+ AD.loc = src
+ itemcount++
+
for(var/obj/item/I in src.loc)
if(itemcount >= storage_capacity)
break
diff --git a/code/game/objects/devices/chameleonproj.dm b/code/game/objects/devices/chameleonproj.dm
index b343e6d6f80..f093da8130d 100644
--- a/code/game/objects/devices/chameleonproj.dm
+++ b/code/game/objects/devices/chameleonproj.dm
@@ -54,7 +54,7 @@
origin_tech = "syndicate=4;magnets=4"
var/can_use = 1
var/obj/effect/dummy/chameleon/active_dummy = null
- var/saved_item = "/obj/item/weapon/shard"
+ var/saved_item = "/obj/item/weapon/cigbutt"
dropped()
disrupt()
@@ -73,7 +73,7 @@
if(active_dummy)
playsound(src, 'pop.ogg', 100, 1, 1)
for(var/atom/movable/A in active_dummy)
- A.loc = get_turf(active_dummy)
+ A.loc = active_dummy.loc
if(ismob(A))
if(A:client)
A:client:eye = A
@@ -88,7 +88,7 @@
playsound(src, 'pop.ogg', 100, 1, 1)
var/obj/O = new saved_item (src)
if(!O) return
- var/obj/effect/dummy/chameleon/C = new/obj/effect/dummy/chameleon(get_turf(src))
+ var/obj/effect/dummy/chameleon/C = new/obj/effect/dummy/chameleon(usr.loc)
C.name = O.name
C.desc = O.desc
C.icon = O.icon
@@ -111,7 +111,7 @@
spark_system.attach(src)
spark_system.start()
for(var/atom/movable/A in active_dummy)
- A.loc = get_turf(active_dummy)
+ A.loc = active_dummy.loc
if(ismob(A))
if(A:client)
A:client:eye = A
diff --git a/code/game/objects/items/tk_grab.dm b/code/game/objects/items/tk_grab.dm
index b8a41fb11f6..20ecfc48552 100644
--- a/code/game/objects/items/tk_grab.dm
+++ b/code/game/objects/items/tk_grab.dm
@@ -49,6 +49,10 @@
if(!(TK in host.mutations))
del(src)
return
+ if(isobj(target))
+ if(!target.loc || !isturf(target.loc))
+ del(src)
+ return
if(!focus)
focus_object(target, user)
return
@@ -68,6 +72,8 @@
if(target.anchored)
target.attack_hand(user) // you can use shit now!
return//No throwing anchored things
+ if(!isturf(target.loc))
+ return
focus = target
update_icon()
apply_focus_overlay()
diff --git a/code/game/objects/radio/intercom.dm b/code/game/objects/radio/intercom.dm
index e174d87ed10..e66eacf25b9 100644
--- a/code/game/objects/radio/intercom.dm
+++ b/code/game/objects/radio/intercom.dm
@@ -9,46 +9,64 @@
var/anyai = 1
var/mob/living/silicon/ai/ai = list()
+/obj/item/device/radio/intercom/New()
+ spawn(5)
+ checkpower()
+ ..()
- attack_ai(mob/user as mob)
- src.add_fingerprint(user)
- spawn (0)
- attack_self(user)
+/obj/item/device/radio/intercom/attack_ai(mob/user as mob)
+ src.add_fingerprint(user)
+ spawn (0)
+ attack_self(user)
- attack_paw(mob/user as mob)
- if ((ticker && ticker.mode.name == "monkey"))
- return src.attack_hand(user)
+/obj/item/device/radio/intercom/attack_paw(mob/user as mob)
+ return src.attack_hand(user)
- attack_hand(mob/user as mob)
- src.add_fingerprint(user)
- spawn (0)
- attack_self(user)
+/obj/item/device/radio/intercom/attack_hand(mob/user as mob)
+ src.add_fingerprint(user)
+ spawn (0)
+ attack_self(user)
+
+/obj/item/device/radio/intercom/receive_range(freq, level)
+ if (!on)
+ return 0
+ if (!(src.wires & WIRE_RECEIVE))
+ return 0
+ var/turf/position = get_turf(src)
+ if(isnull(position) || position.z != level)
+ return 0
+ if (!src.listening)
+ return 0
+ if(freq == SYND_FREQ)
+ if(!(src.syndie))
+ return 0//Prevents broadcast of messages over devices lacking the encryption
+
+ return canhear_range
- send_hear(freq, level)
- var/range = receive_range(freq, level)
- if(range > 0)
- return get_mobs_in_view(canhear_range, src)
+/obj/item/device/radio/intercom/hear_talk(mob/M as mob, msg)
+ if(!src.anyai && !(M in src.ai))
+ return
+ ..()
- receive_range(freq, level)
- if (!on)
- return 0
- if (!(src.wires & WIRE_RECEIVE))
- return 0
- var/turf/position = get_turf(src)
- if(isnull(position) || position.z != level)
- return 0
- if (!src.listening)
- return 0
- if(freq == SYND_FREQ)
- if(!(src.syndie))
- return 0//Prevents broadcast of messages over devices lacking the encryption
+/obj/item/device/radio/intercom/proc/checkpower()
- return canhear_range
+ // Simple loop, checks for power. Strictly for intercoms
+ while(src)
+ if(!src.loc)
+ on = 0
+ else
+ var/area/A = src.loc.loc
+ if(!A || !isarea(A) || !A.master)
+ on = 0
+ else
+ on = A.master.powered(EQUIP) // set "on" to the power status
- hear_talk(mob/M as mob, msg)
- if(!src.anyai && !(M in src.ai))
- return
- ..()
\ No newline at end of file
+ if(!on)
+ icon_state = "intercom-p"
+ else
+ icon_state = "intercom"
+
+ sleep(30)
\ No newline at end of file
diff --git a/code/game/objects/radio/radio.dm b/code/game/objects/radio/radio.dm
index 4e4d82096e4..4b3421d71e4 100644
--- a/code/game/objects/radio/radio.dm
+++ b/code/game/objects/radio/radio.dm
@@ -54,10 +54,6 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
if(radio_controller)
initialize()
- // If intercom: do a local power check loop
- if(istype(src, /obj/item/device/radio/intercom))
- spawn(5)
- checkpower()
/obj/item/device/radio/initialize()
@@ -123,27 +119,6 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
Speaker: [list ? "Engaged" : "Disengaged"]
"}
-/obj/item/device/radio/proc/checkpower()
-
- // Simple loop, checks for power. Strictly for intercoms
- while(src)
-
- if(!src.loc)
- on = 0
- else
- var/area/A = src.loc.loc
- if(!A || !isarea(A) || !A.master)
- on = 0
- else
- on = A.master.powered(EQUIP) // set "on" to the power status
-
- if(!on)
- icon_state = "intercom-p"
- else
- icon_state = "intercom"
-
- sleep(30)
-
/obj/item/device/radio/Topic(href, href_list)
//..()
if (usr.stat || !on)
@@ -233,10 +208,13 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
/obj/item/device/radio/talk_into(mob/M as mob, message, channel)
if(!on) return // the device has to be on
-/* Fix for permacell radios, but kinda eh about actually fixing them.
+ // Fix for permacell radios, but kinda eh about actually fixing them.
+
+ // Uncommenting this. To the above comment:
+ // The permacell radios aren't suppose to be able to transmit, this isn't a bug and this "fix" is just making radio wires useless. -Giacom
if(!(src.wires & WIRE_TRANSMIT)) // The device has to have all its wires and shit intact
return
-*/
+
if(GLOBAL_RADIO_TYPE == 1) // NEW RADIO SYSTEMS: By Doohl