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"