diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index dcfcb50fcbd..c09951ba4d4 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -9,6 +9,13 @@
src:Topic(href, href_list)
return null
+/proc/is_on_same_plane_or_station(var/z1, var/z2)
+ if(z1 == z2)
+ return 1
+ if((z1 in config.station_levels) && (z2 in config.station_levels))
+ return 1
+ return 0
+
/proc/get_area(O)
var/turf/loc = get_turf(O)
if(!loc)
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index b9ccee8f360..4f424e03154 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -84,7 +84,6 @@
throw_speed = 4
throw_range = 5
-
/obj/item/weapon/cane
name = "cane"
desc = "A cane used by a true gentlemen. Or a clown."
@@ -99,42 +98,44 @@
attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed")
/obj/item/weapon/cane/concealed
- var/atom/movable/concealed_blade
+ var/concealed_blade
-/obj/item/weapon/cane/concealed/New(var/blade)
+/obj/item/weapon/cane/concealed/New()
..()
- if(!isturf(blade))
- concealed_blade = blade
- else
- concealed_blade = new/obj/item/weapon/kitchenknife/concealed(src)
- loc = blade
+ concealed_blade = new/obj/item/weapon/butterfly/switchblade(src)
/obj/item/weapon/cane/concealed/attack_self(mob/user)
- user.visible_message("[user] has unsheathed a blade from \his [src]!", "You unsheathe the blade from \the [src].")
- // Calling drop/put in hands to properly call item drop/pickup procs
- user.drop_from_inventory(src)
- user.put_in_hands(concealed_blade)
- loc = concealed_blade
-
-/obj/item/weapon/kitchenknife/concealed
- name = "cane blade"
- desc = "A now less than concealed cane blade."
- var/atom/movable/container
-
-/obj/item/weapon/kitchenknife/concealed/New(var/container)
- ..()
- if(!isturf(container))
- src.container = container
+ if(concealed_blade)
+ user.visible_message("[user] has unsheathed \a [concealed_blade] from \his [src]!", "You unsheathe \the [concealed_blade] from \the [src].")
+ // Calling drop/put in hands to properly call item drop/pickup procs
+ playsound(user.loc, 'sound/weapons/flipblade.ogg', 50, 1)
+ user.drop_from_inventory(src)
+ user.put_in_hands(concealed_blade)
+ user.put_in_hands(src)
+ concealed_blade = null
+ update_icon()
else
- container = new/obj/item/weapon/cane/concealed(src)
- loc = container
+ ..()
-/obj/item/weapon/kitchenknife/concealed/attack_self(mob/user)
- user.visible_message("[user] has sheathed a blade into \his [container]!", "You sheathe the blade into \the [container].")
- // Calling drop/put in hands to properly call item drop/pickup procs
- user.drop_from_inventory(src)
- user.put_in_hands(container)
- loc = container
+/obj/item/weapon/cane/concealed/attackby(var/obj/item/weapon/butterfly/W, var/mob/user)
+ if(!src.concealed_blade && istype(W))
+ user.visible_message("[user] has sheathed \a [W] into \his [src]!", "You sheathe \the [W] into \the [src].")
+ user.drop_from_inventory(W)
+ W.loc = src
+ src.concealed_blade = W
+ update_icon()
+ else
+ ..()
+
+/obj/item/weapon/cane/concealed/update_icon()
+ if(concealed_blade)
+ name = initial(name)
+ icon_state = initial(icon_state)
+ item_state = initial(icon_state)
+ else
+ name = "cane shaft"
+ icon_state = "nullrod"
+ item_state = "foldcane"
/obj/item/weapon/disk
name = "disk"
diff --git a/code/game/objects/items/devices/spy_bug.dm b/code/game/objects/items/devices/spy_bug.dm
index cb8712af9e4..70e3628f67e 100644
--- a/code/game/objects/items/devices/spy_bug.dm
+++ b/code/game/objects/items/devices/spy_bug.dm
@@ -105,10 +105,10 @@
spawn(0)
while(selected_camera && Adjacent(user))
var/turf/T = get_turf(selected_camera)
- if(!T || T.z != user.z)
+ if(!T || !is_on_same_plane_or_station(T.z, user.z) || !selected_camera.can_use())
user.unset_machine()
user.reset_view(null)
- user << "[selected_camera] out of range."
+ user << "[selected_camera] unavailable."
sleep(90)
else
user.set_machine(selected_camera)
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 39e7bff51ea..e2d45e0fac8 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -84,7 +84,7 @@
..()
if (empty) return
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
- new /obj/item/weapon/reagent_containers/pill/( src )
+ new /obj/item/weapon/reagent_containers/pill/dexalin( src )
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src )
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index ec5e44cfa00..aa66b26f12b 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -168,7 +168,7 @@
new /obj/item/device/spy_monitor(src)
/obj/item/weapon/storage/box/syndie_kit/g9mm
- name = "Smooth operator"
+ name = "\improper Smooth operator"
desc = "9mm with silencer kit."
/obj/item/weapon/storage/box/syndie_kit/g9mm/New()
@@ -177,7 +177,7 @@
new /obj/item/weapon/silencer(src)
/obj/item/weapon/storage/box/syndie_kit/cigarette
- name = "cigarette kit"
+ name = "\improper Tricky smokes"
desc = "Comes with the following brands of cigarettes, in this order: 2xFlash, 2xSmoke, 1xMindBreaker, 1xTricordrazine. Avoid mixing them up."
/obj/item/weapon/storage/box/syndie_kit/cigarette/New()
diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi
index 31b77f83e02..efc73c54368 100644
Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ
diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi
index 0ec7e7098bb..98a12e5ff1a 100644
Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ