diff --git a/code/defines/obj/supplypacks.dm b/code/defines/obj/supplypacks.dm
index 1dc066d1a42..d5398de3498 100755
--- a/code/defines/obj/supplypacks.dm
+++ b/code/defines/obj/supplypacks.dm
@@ -74,7 +74,7 @@
/datum/supply_packs/artscrafts
name = "Arts and Crafts supplies"
- contains = list("/obj/item/toy/crayonbox",
+ contains = list("/obj/item/weapon/storage/crayonbox",
"/obj/item/weapon/camera_test",
"/obj/item/weapon/storage/photo_album",
"/obj/item/weapon/packageWrap",
@@ -804,7 +804,7 @@
contraband = 1
group = "NanoTrasen Contraband Storage"
-/datum/supply_packs/poster/New()
+/datum/supply_packs/contraband/New()
var/list/tempContains = list()
for(var/i = 0,i<5,i++)
tempContains += pick(contains)
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index ac97147c4c9..c97a75d977d 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -185,7 +185,7 @@
H.equip_if_possible(new /obj/item/weapon/bikehorn(H), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/weapon/stamp/clown(H), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/toy/crayon/rainbow(H), H.slot_in_backpack)
- H.equip_if_possible(new /obj/item/toy/crayonbox(H), H.slot_in_backpack)
+ H.equip_if_possible(new /obj/item/weapon/storage/crayonbox(H), H.slot_in_backpack)
H.mutations |= CLOWN
return 1
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index 1fec2e76069..82b19052d4a 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -130,6 +130,10 @@
O.show_message("\red Failure: Cannot authenticate locked on coordinates. Please reinstate coordinate matrix.")
return
if (istype(M, /atom/movable))
+ if (istype(M, /obj/effect/dummy/chameleon))
+ for(var/mob/C in M)
+ C << "\red The projection field prevents you from entering!"
+ return
if(prob(5) && !accurate) //oh dear a problem, put em in deep space
do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy - 5), 3), 2)
else
diff --git a/code/game/objects/storage/crates.dm b/code/game/objects/storage/crates.dm
index d4dd6126628..6b0400f4924 100644
--- a/code/game/objects/storage/crates.dm
+++ b/code/game/objects/storage/crates.dm
@@ -38,6 +38,15 @@
icon_opened = "crateopen"
icon_closed = "crate"
+/obj/structure/closet/crate/contraband
+ name = "Contraband crate"
+ desc = "A random assortment of items manufactured by providers NOT listed under Nanotrasen's whitelist."
+ icon = 'storage.dmi'
+ icon_state = "crate"
+ density = 1
+ icon_opened = "crateopen"
+ icon_closed = "crate"
+
/obj/structure/closet/crate/poster
name = "Poster crate"
desc = "A random assortment of posters manufactured by providers NOT listed under Nanotrasen's whitelist."
diff --git a/code/game/objects/toys.dm b/code/game/objects/toys.dm
index 1100fa13a1e..02ffbd272d6 100644
--- a/code/game/objects/toys.dm
+++ b/code/game/objects/toys.dm
@@ -139,13 +139,14 @@ CRAYONS
if("rune")
user << "You start drawing a rune on the [target.name]."
if(instant || do_after(user, 50))
- new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype)
- user << "You finish drawing."
- if(uses)
- uses--
- if(!uses)
- user << "\red You used up your crayon!"
- del(src)
+ if(user.equipped() == src)
+ new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype)
+ user << "You finish drawing."
+ if(uses)
+ uses--
+ if(!uses)
+ user << "\red You used up your crayon!"
+ del(src)
return
/obj/item/toy/crayon/attack(mob/M as mob, mob/user as mob)
diff --git a/code/game/throwing.dm b/code/game/throwing.dm
index 197548d64d3..149296f585e 100644
--- a/code/game/throwing.dm
+++ b/code/game/throwing.dm
@@ -51,6 +51,13 @@
item.layer = initial(item.layer)
src.visible_message("\red [src] has thrown [item].")
+ if(istype(item,/mob/living))
+ var/mob/living/M = item
+ M.attack_log += text("\[[time_stamp()]\] Has been thrown by [src.name] ([src.ckey])")
+ src.attack_log += text("\[[time_stamp()]\] Threw [M.name] ([M.ckey])")
+ log_attack("[src.name] ([src.ckey]) threw [M.name] ([M.ckey])")
+ log_admin("ATTACK: [src.name] ([src.ckey]) threw [M.name] ([M.ckey])")
+
if(!src.lastarea)
src.lastarea = get_area(src.loc)
if((istype(src.loc, /turf/space)) || (src.lastarea.has_gravity == 0))
@@ -106,6 +113,10 @@
if(src.vars.Find("throwforce"))
M.take_organ_damage(src:throwforce)
+ log_attack("[hit_atom] ([M.ckey]) was hit by [src] thrown by ([src.fingerprintslast])")
+ log_admin("ATTACK: [hit_atom] ([M.ckey]) was hit by [src] thrown by ([src.fingerprintslast])")
+ message_admins("ATTACK: [hit_atom] ([M.ckey]) was hit by [src] thrown by ([src.fingerprintslast])")
+
else if(isobj(hit_atom))
var/obj/O = hit_atom
if(!O.anchored)