diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm
new file mode 100644
index 00000000000..8c09d1da559
--- /dev/null
+++ b/code/game/objects/items/cardboard_cutouts.dm
@@ -0,0 +1,118 @@
+//Cardboard cutouts! They're man-shaped and can be colored with a crayon to look like a human in a certain outfit, although it's limited, discolored, and obvious to more than a cursory glance.
+/obj/item/cardboard_cutout
+ name = "cardboard cutout"
+ desc = "A vaguely humanoid cardboard cutout. It's completely blank."
+ icon = 'icons/obj/cardboard_cutout.dmi'
+ icon_state = "cutout_basic"
+ w_class = 4
+ var/list/possible_appearances = list("Assistant", "Clown", "Mime", "Traitor", "Nuke Op", "Cultist", "Clockwork Cultist", "Revolutionary", "Wizard", "Shadowling", "Xenomorph", "Swarmer", \
+ "Ash Walker", "Deathsquad Officer", "Ian") //Possible restyles for the cutout; add an entry in change_appearance() if you add to here
+ var/pushed_over = FALSE //If the cutout is pushed over and has to be righted
+ var/deceptive = FALSE //If the cutout actually appears as what it portray and not a discolored version
+
+/obj/item/cardboard_cutout/attack_hand(mob/living/user)
+ if(user.a_intent == "help" || pushed_over)
+ return ..()
+ user.visible_message("[user] pushes over [src]!", "You push over [src]!")
+ playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
+ name = initial(name)
+ desc = "[initial(desc)] It's been pushed over."
+ icon_state = "cutout_pushed_over"
+ color = initial(color)
+ pushed_over = TRUE
+
+/obj/item/cardboard_cutout/attack_self(mob/living/user)
+ if(!pushed_over)
+ return
+ user << "You right [src]."
+ desc = initial(desc)
+ icon_state = initial(icon_state) //This resets a cutout to its blank state - this is intentional to allow for resetting
+ pushed_over = FALSE
+
+/obj/item/cardboard_cutout/attackby(obj/item/I, mob/living/user, params)
+ if(istype(I, /obj/item/toy/crayon))
+ change_appearance(I, user)
+ else
+ return ..()
+
+/obj/item/cardboard_cutout/proc/change_appearance(obj/item/toy/crayon/crayon, mob/living/user)
+ if(!crayon || !user)
+ return
+ if(pushed_over)
+ user << "Right [src] first!"
+ return
+ var/new_appearance = input(user, "Choose a new appearance for [src].", "26th Century Deception") as null|anything in possible_appearances
+ if(!new_appearance || !crayon || !user.canUseTopic(src))
+ return
+ user.visible_message("[user] gives [src] a new look.", "Voila! You give [src] a new look.")
+ crayon.use_charges(1)
+ crayon.check_empty(user)
+ if(!deceptive)
+ color = "#FFD7A7"
+ switch(new_appearance)
+ if("Assistant")
+ name = "[pick(first_names_male)] [pick(last_names)]"
+ desc = "A cardboat cutout of an assistant."
+ icon_state = "cutout_greytide"
+ if("Clown")
+ name = pick(clown_names)
+ desc = "A cardboard cutout of a clown. You get the feeling that it should be in a corner."
+ icon_state = "cutout_clown"
+ if("Mime")
+ name = pick(mime_names)
+ desc = "...(A cardboard cutout of a mime.)"
+ icon_state = "cutout_mime"
+ if("Traitor")
+ name = "[pick("Unknown", "Captain")]"
+ desc = "A cardboard cutout of a traitor."
+ icon_state = "cutout_traitor"
+ if("Nuke Op")
+ name = "[pick("Unknown", "COMMS", "Telecomms", "AI", "stealthy op", "STEALTH", "sneakybeaky", "MEDIC", "Medic")]"
+ desc = "A cardboard cutout of a nuclear operative."
+ icon_state = "cutout_fluke"
+ if("Cultist")
+ name = "Unknown"
+ desc = "A cardboard cutout of a cultist."
+ icon_state = "cutout_cultist"
+ if("Clockwork Cultist")
+ name = "[pick(first_names_male)] [pick(last_names)]"
+ desc = "A cardboard cutout of a servant of Ratvar."
+ icon_state = "cutout_servant"
+ if("Revolutionary")
+ name = "Unknown"
+ desc = "A cardboard cutout of a revolutionary."
+ icon_state = "cutout_viva"
+ if("Wizard")
+ name = "[pick(wizard_first)], [pick(wizard_second)]"
+ desc = "A cardboard cutout of a wizard."
+ icon_state = "cutout_wizard"
+ if("Shadowling")
+ name = "Unknown"
+ desc = "A cardboard cutout of a shadowling."
+ icon_state = "cutout_shadowling"
+ if("Xenomorph")
+ name = "alien hunter ([rand(1, 999)])"
+ desc = "A cardboard cutout of a xenomorph."
+ icon_state = "cutout_fukken_xeno"
+ if(prob(25))
+ alpha = 75 //Spooky sneaking!
+ if("Swarmer")
+ name = "Swarmer ([rand(1, 999)])"
+ desc = "A cardboard cutout of a swarmer."
+ icon_state = "cutout_swarmer"
+ if("Ash Walker")
+ name = lizard_name(pick(MALE, FEMALE))
+ desc = "A cardboard cutout of an ash walker."
+ icon_state = "cutout_free_antag"
+ if("Deathsquad Officer")
+ name = pick(commando_names)
+ desc = "A cardboard cutout of a death commando."
+ icon_state = "cutout_deathsquad"
+ if("Ian")
+ name = "Ian"
+ desc = "A cardboard cutout of the HoP's beloved corgi."
+ icon_state = "cutout_ian"
+ return 1
+
+/obj/item/cardboard_cutout/adaptive //Purchased by Syndicate agents, these cutouts are indistinguishable from normal cutouts but aren't discolored when their appearance is changed
+ deceptive = TRUE
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 8f3da041c7a..610c45c1057 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -200,9 +200,10 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
new/datum/stack_recipe("pizza box", /obj/item/pizzabox), \
new/datum/stack_recipe("folder", /obj/item/weapon/folder), \
new/datum/stack_recipe("large box", /obj/structure/closet/cardboard, 4), \
+ new/datum/stack_recipe("cardboard cutout", /obj/item/cardboard_cutout, 5), \
)
-/obj/item/stack/sheet/cardboard //BubbleWrap
+/obj/item/stack/sheet/cardboard //BubbleWrap //it's cardboard you fuck
name = "cardboard"
desc = "Large sheets of card, like boxes folded flat."
singular_name = "cardboard sheet"
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index 16b344a8db4..ee261497d93 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -104,7 +104,7 @@
/obj/item/weapon/storage/box/syndie_kit
name = "box"
- desc = "A sleek, sturdy box"
+ desc = "A sleek, sturdy box."
icon_state = "box_of_doom"
/obj/item/weapon/storage/box/syndie_kit/imp_freedom
@@ -276,4 +276,10 @@
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/throwing_star(src)
new /obj/item/weapon/restraints/legcuffs/bola/tactical(src)
- new /obj/item/weapon/restraints/legcuffs/bola/tactical(src)
\ No newline at end of file
+ new /obj/item/weapon/restraints/legcuffs/bola/tactical(src)
+
+/obj/item/weapon/storage/box/syndie_kit/cutouts/New()
+ ..()
+ for(var/i in 1 to 3)
+ new/obj/item/cardboard_cutout/adaptive(src)
+ new/obj/item/toy/crayon/rainbow(src)
diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm
index 3fb6542ce7e..dd8af3a4087 100644
--- a/code/modules/uplink/uplink_item.dm
+++ b/code/modules/uplink/uplink_item.dm
@@ -711,6 +711,14 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
cost = 2
surplus = 30
+/datum/uplink_item/stealthy_tools/cutouts
+ name = "Adaptive Cardboard Cutouts"
+ desc = "These cardboard cutouts are coated with a thin material that prevents discoloration and makes the images on them appear more lifelike. This pack contains three as well as a \
+ crayon for changing their appearances."
+ item = /obj/item/weapon/storage/box/syndie_kit/cutouts
+ cost = 1
+ surplus = 20
+
//Space Suits and Hardsuits
/datum/uplink_item/suits
category = "Space Suits and Hardsuits"
diff --git a/icons/obj/cardboard_cutout.dmi b/icons/obj/cardboard_cutout.dmi
new file mode 100644
index 00000000000..a329c00555e
Binary files /dev/null and b/icons/obj/cardboard_cutout.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index b84db3190ca..0a7aa259f4c 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -577,6 +577,7 @@
#include "code\game\objects\items\body_egg.dm"
#include "code\game\objects\items\bodybag.dm"
#include "code\game\objects\items\candle.dm"
+#include "code\game\objects\items\cardboard_cutouts.dm"
#include "code\game\objects\items\charter.dm"
#include "code\game\objects\items\control_wand.dm"
#include "code\game\objects\items\crayons.dm"