Files
kiwistation/code/game/objects/items/storage/backpack.dm
T
Rob Bailey 65e9888fa6 [READY] Smart Cables (#44265)
Cables now autoconnect on cardinal directions. All cable placement has been completely stripped out and replaced with simple single cable per tile logic.
Low effort demo: https://www.youtube.com/watch?v=fXp8s6ORWbA
Yes I am aware that cutting it is not dropping wire, that version was bugged.
Cables no longer need a knot specifically placed to link to power objects. The sprite is automatically changed to represent this.
The only exception to this logic is that on smes units, due to the terminal being next to the output, they will not link there.
On a technical powernet side, this is the same as old cables once actually placed. They still use the existing powernet system, just the placement and connection works differently.

Old cables have been turned into "pipe cleaners" for wire art purposes. they work just like the old ones, just missing all the powernet functionality, and also you can put them on top of the floor.
Why It's Good For The Game

How obnoxious cables were to both map and work with in game has been something that has annoyed me for a really long time now.
This is both easier for new players to learn, and easier for experienced players to work with.
Along with making in game much more intuitive and easier, it makes mapping much easier as well. Mad lad wjohn was able to rip out all the mapping conversion in one day because of how much faster it is to work with.

cl actioninja and wjohn
add: Cables have been completely reworked. Simple per tile connection logic, automatically connects to things above it. Think minecraft redstone.
add: Old cables have been kept as pipe cleaner. They are non-functional in terms of power, but otherwise have the same connection logic. Also can go on top of tiles.
remove: mech cable layer has been removed because it was terrible shitcode nobody used
tweak: (sort of balance) cable stack sized has been reduced to 15.
/cl
2019-06-22 10:24:37 +12:00

586 lines
21 KiB
Plaintext

/* Backpacks
* Contains:
* Backpack
* Backpack Types
* Satchel Types
*/
/*
* Backpack
*/
/obj/item/storage/backpack
name = "backpack"
desc = "You wear this on your back and put items into it."
icon_state = "backpack"
item_state = "backpack"
lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi'
w_class = WEIGHT_CLASS_BULKY
slot_flags = ITEM_SLOT_BACK //ERROOOOO
resistance_flags = NONE
max_integrity = 300
/obj/item/storage/backpack/ComponentInitialize()
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_combined_w_class = 21
STR.max_w_class = WEIGHT_CLASS_NORMAL
STR.max_items = 21
/*
* Backpack Types
*/
/obj/item/storage/backpack/old/ComponentInitialize()
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_combined_w_class = 12
/obj/item/storage/backpack/holding
name = "bag of holding"
desc = "A backpack that opens into a localized pocket of bluespace."
icon_state = "holdingpack"
item_state = "holdingpack"
resistance_flags = FIRE_PROOF
item_flags = NO_MAT_REDEMPTION
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50)
component_type = /datum/component/storage/concrete/bluespace/bag_of_holding
/obj/item/storage/backpack/holding/ComponentInitialize()
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.allow_big_nesting = TRUE
STR.max_w_class = WEIGHT_CLASS_GIGANTIC
STR.max_combined_w_class = 35
/obj/item/storage/backpack/holding/suicide_act(mob/living/user)
user.visible_message("<span class='suicide'>[user] is jumping into [src]! It looks like [user.p_theyre()] trying to commit suicide.</span>")
user.dropItemToGround(src, TRUE)
user.Stun(100, ignore_canstun = TRUE)
sleep(20)
playsound(src, "rustle", 50, 1, -5)
qdel(user)
/obj/item/storage/backpack/holding/singularity_act(current_size)
var/dist = max((current_size - 2),1)
explosion(src.loc,(dist),(dist*2),(dist*4))
/obj/item/storage/backpack/santabag
name = "Santa's Gift Bag"
desc = "Space Santa uses this to deliver presents to all the nice children in space in Christmas! Wow, it's pretty big!"
icon_state = "giftbag0"
item_state = "giftbag"
w_class = WEIGHT_CLASS_BULKY
/obj/item/storage/backpack/santabag/Initialize()
. = ..()
regenerate_presents()
/obj/item/storage/backpack/santabag/ComponentInitialize()
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_w_class = WEIGHT_CLASS_NORMAL
STR.max_combined_w_class = 60
/obj/item/storage/backpack/santabag/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] places [src] over [user.p_their()] head and pulls it tight! It looks like [user.p_they()] [user.p_are()]n't in the Christmas spirit...</span>")
return (OXYLOSS)
/obj/item/storage/backpack/santabag/proc/regenerate_presents()
addtimer(CALLBACK(src, .proc/regenerate_presents), rand(30 SECONDS, 60 SECONDS))
var/mob/M = get(loc, /mob)
if(!istype(M))
return
if(HAS_TRAIT(M, TRAIT_CANNOT_OPEN_PRESENTS))
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
var/turf/floor = get_turf(src)
var/obj/item/I = new /obj/item/a_gift/anything(floor)
if(STR.can_be_inserted(I, stop_messages=TRUE))
STR.handle_item_insertion(I, prevent_warning=TRUE)
else
qdel(I)
/obj/item/storage/backpack/cultpack
name = "trophy rack"
desc = "It's useful for both carrying extra gear and proudly declaring your insanity."
icon_state = "cultpack"
item_state = "backpack"
/obj/item/storage/backpack/clown
name = "Giggles von Honkerton"
desc = "It's a backpack made by Honk! Co."
icon_state = "clownpack"
item_state = "clownpack"
/obj/item/storage/backpack/explorer
name = "explorer bag"
desc = "A robust backpack for stashing your loot."
icon_state = "explorerpack"
item_state = "explorerpack"
/obj/item/storage/backpack/mime
name = "Parcel Parceaux"
desc = "A silent backpack made for those silent workers. Silence Co."
icon_state = "mimepack"
item_state = "mimepack"
/obj/item/storage/backpack/medic
name = "medical backpack"
desc = "It's a backpack especially designed for use in a sterile environment."
icon_state = "medicalpack"
item_state = "medicalpack"
/obj/item/storage/backpack/security
name = "security backpack"
desc = "It's a very robust backpack."
icon_state = "securitypack"
item_state = "securitypack"
/obj/item/storage/backpack/captain
name = "captain's backpack"
desc = "It's a special backpack made exclusively for Nanotrasen officers."
icon_state = "captainpack"
item_state = "captainpack"
/obj/item/storage/backpack/industrial
name = "industrial backpack"
desc = "It's a tough backpack for the daily grind of station life."
icon_state = "engiepack"
item_state = "engiepack"
resistance_flags = FIRE_PROOF
/obj/item/storage/backpack/botany
name = "botany backpack"
desc = "It's a backpack made of all-natural fibers."
icon_state = "botpack"
item_state = "botpack"
/obj/item/storage/backpack/chemistry
name = "chemistry backpack"
desc = "A backpack specially designed to repel stains and hazardous liquids."
icon_state = "chempack"
item_state = "chempack"
/obj/item/storage/backpack/genetics
name = "genetics backpack"
desc = "A bag designed to be super tough, just in case someone hulks out on you."
icon_state = "genepack"
item_state = "genepack"
/obj/item/storage/backpack/science
name = "science backpack"
desc = "A specially designed backpack. It's fire resistant and smells vaguely of plasma."
icon_state = "toxpack"
item_state = "toxpack"
/obj/item/storage/backpack/virology
name = "virology backpack"
desc = "A backpack made of hypo-allergenic fibers. It's designed to help prevent the spread of disease. Smells like monkey."
icon_state = "viropack"
item_state = "viropack"
/obj/item/storage/backpack/ert
name = "emergency response team commander backpack"
desc = "A spacious backpack with lots of pockets, worn by the Commander of an Emergency Response Team."
icon_state = "ert_commander"
item_state = "securitypack"
resistance_flags = FIRE_PROOF
/obj/item/storage/backpack/ert/security
name = "emergency response team security backpack"
desc = "A spacious backpack with lots of pockets, worn by Security Officers of an Emergency Response Team."
icon_state = "ert_security"
/obj/item/storage/backpack/ert/medical
name = "emergency response team medical backpack"
desc = "A spacious backpack with lots of pockets, worn by Medical Officers of an Emergency Response Team."
icon_state = "ert_medical"
/obj/item/storage/backpack/ert/engineer
name = "emergency response team engineer backpack"
desc = "A spacious backpack with lots of pockets, worn by Engineers of an Emergency Response Team."
icon_state = "ert_engineering"
/*
* Satchel Types
*/
/obj/item/storage/backpack/satchel
name = "satchel"
desc = "A trendy looking satchel."
icon_state = "satchel-norm"
species_exception = list(/datum/species/angel) //satchels can be equipped since they are on the side, not back
/obj/item/storage/backpack/satchel/leather
name = "leather satchel"
desc = "It's a very fancy satchel made with fine leather."
icon_state = "satchel"
/obj/item/storage/backpack/satchel/leather/withwallet/PopulateContents()
new /obj/item/storage/wallet/random(src)
/obj/item/storage/backpack/satchel/fireproof
resistance_flags = FIRE_PROOF
/obj/item/storage/backpack/satchel/eng
name = "industrial satchel"
desc = "A tough satchel with extra pockets."
icon_state = "satchel-eng"
item_state = "engiepack"
resistance_flags = FIRE_PROOF
/obj/item/storage/backpack/satchel/med
name = "medical satchel"
desc = "A sterile satchel used in medical departments."
icon_state = "satchel-med"
item_state = "medicalpack"
/obj/item/storage/backpack/satchel/vir
name = "virologist satchel"
desc = "A sterile satchel with virologist colours."
icon_state = "satchel-vir"
item_state = "satchel-vir"
/obj/item/storage/backpack/satchel/chem
name = "chemist satchel"
desc = "A sterile satchel with chemist colours."
icon_state = "satchel-chem"
item_state = "satchel-chem"
/obj/item/storage/backpack/satchel/gen
name = "geneticist satchel"
desc = "A sterile satchel with geneticist colours."
icon_state = "satchel-gen"
item_state = "satchel-gen"
/obj/item/storage/backpack/satchel/tox
name = "scientist satchel"
desc = "Useful for holding research materials."
icon_state = "satchel-tox"
item_state = "satchel-tox"
/obj/item/storage/backpack/satchel/hyd
name = "botanist satchel"
desc = "A satchel made of all natural fibers."
icon_state = "satchel-hyd"
item_state = "satchel-hyd"
/obj/item/storage/backpack/satchel/sec
name = "security satchel"
desc = "A robust satchel for security related needs."
icon_state = "satchel-sec"
item_state = "securitypack"
/obj/item/storage/backpack/satchel/explorer
name = "explorer satchel"
desc = "A robust satchel for stashing your loot."
icon_state = "satchel-explorer"
item_state = "securitypack"
/obj/item/storage/backpack/satchel/cap
name = "captain's satchel"
desc = "An exclusive satchel for Nanotrasen officers."
icon_state = "satchel-cap"
item_state = "captainpack"
/obj/item/storage/backpack/satchel/flat
name = "smuggler's satchel"
desc = "A very slim satchel that can easily fit into tight spaces."
icon_state = "satchel-flat"
w_class = WEIGHT_CLASS_NORMAL //Can fit in backpacks itself.
level = 1
/obj/item/storage/backpack/satchel/flat/ComponentInitialize()
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_combined_w_class = 15
STR.set_holdable(null, list(/obj/item/storage/backpack/satchel/flat)) //muh recursive backpacks)
/obj/item/storage/backpack/satchel/flat/hide(intact)
if(intact)
invisibility = INVISIBILITY_OBSERVER
anchored = TRUE //otherwise you can start pulling, cover it, and drag around an invisible backpack.
icon_state = "[initial(icon_state)]2"
ADD_TRAIT(src, TRAIT_T_RAY_VISIBLE, TRAIT_GENERIC)
else
invisibility = initial(invisibility)
anchored = FALSE
icon_state = initial(icon_state)
REMOVE_TRAIT(src, TRAIT_T_RAY_VISIBLE, TRAIT_GENERIC)
/obj/item/storage/backpack/satchel/flat/PopulateContents()
var/datum/supply_pack/costumes_toys/randomised/contraband/C = new
for(var/i in 1 to 2)
var/ctype = pick(C.contains)
new ctype(src)
qdel(C)
/obj/item/storage/backpack/satchel/flat/with_tools/PopulateContents()
new /obj/item/stack/tile/plasteel(src)
new /obj/item/crowbar(src)
..()
/obj/item/storage/backpack/satchel/flat/empty/PopulateContents()
return
/obj/item/storage/backpack/duffelbag
name = "duffel bag"
desc = "A large duffel bag for holding extra things."
icon_state = "duffel"
item_state = "duffel"
slowdown = 1
/obj/item/storage/backpack/duffelbag/ComponentInitialize()
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_combined_w_class = 30
/obj/item/storage/backpack/duffelbag/captain
name = "captain's duffel bag"
desc = "A large duffel bag for holding extra captainly goods."
icon_state = "duffel-captain"
item_state = "duffel-captain"
/obj/item/storage/backpack/duffelbag/med
name = "medical duffel bag"
desc = "A large duffel bag for holding extra medical supplies."
icon_state = "duffel-med"
item_state = "duffel-med"
/obj/item/storage/backpack/duffelbag/med/surgery
name = "surgical duffel bag"
desc = "A large duffel bag for holding extra medical supplies - this one seems to be designed for holding surgical tools."
/obj/item/storage/backpack/duffelbag/med/surgery/PopulateContents()
new /obj/item/scalpel(src)
new /obj/item/hemostat(src)
new /obj/item/retractor(src)
new /obj/item/circular_saw(src)
new /obj/item/surgicaldrill(src)
new /obj/item/cautery(src)
new /obj/item/surgical_drapes(src)
new /obj/item/clothing/mask/surgical(src)
new /obj/item/razor(src)
/obj/item/storage/backpack/duffelbag/sec
name = "security duffel bag"
desc = "A large duffel bag for holding extra security supplies and ammunition."
icon_state = "duffel-sec"
item_state = "duffel-sec"
/obj/item/storage/backpack/duffelbag/sec/surgery
name = "surgical duffel bag"
desc = "A large duffel bag for holding extra supplies - this one has a material inlay with space for various sharp-looking tools."
/obj/item/storage/backpack/duffelbag/sec/surgery/PopulateContents()
new /obj/item/scalpel(src)
new /obj/item/hemostat(src)
new /obj/item/retractor(src)
new /obj/item/circular_saw(src)
new /obj/item/surgicaldrill(src)
new /obj/item/cautery(src)
new /obj/item/surgical_drapes(src)
new /obj/item/clothing/mask/surgical(src)
/obj/item/storage/backpack/duffelbag/engineering
name = "industrial duffel bag"
desc = "A large duffel bag for holding extra tools and supplies."
icon_state = "duffel-eng"
item_state = "duffel-eng"
resistance_flags = FIRE_PROOF
/obj/item/storage/backpack/duffelbag/drone
name = "drone duffel bag"
desc = "A large duffel bag for holding tools and hats."
icon_state = "duffel-drone"
item_state = "duffel-drone"
resistance_flags = FIRE_PROOF
/obj/item/storage/backpack/duffelbag/drone/PopulateContents()
new /obj/item/screwdriver(src)
new /obj/item/wrench(src)
new /obj/item/weldingtool(src)
new /obj/item/crowbar(src)
new /obj/item/stack/cable_coil(src)
new /obj/item/wirecutters(src)
new /obj/item/multitool(src)
/obj/item/storage/backpack/duffelbag/clown
name = "clown's duffel bag"
desc = "A large duffel bag for holding lots of funny gags!"
icon_state = "duffel-clown"
item_state = "duffel-clown"
/obj/item/storage/backpack/duffelbag/clown/cream_pie/PopulateContents()
for(var/i in 1 to 10)
new /obj/item/reagent_containers/food/snacks/pie/cream(src)
/obj/item/storage/backpack/fireproof
resistance_flags = FIRE_PROOF
/obj/item/storage/backpack/duffelbag/syndie
name = "suspicious looking duffel bag"
desc = "A large duffel bag for holding extra tactical supplies."
icon_state = "duffel-syndie"
item_state = "duffel-syndieammo"
slowdown = 0
resistance_flags = FIRE_PROOF
/obj/item/storage/backpack/duffelbag/syndie/ComponentInitialize()
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.silent = TRUE
/obj/item/storage/backpack/duffelbag/syndie/hitman
desc = "A large duffel bag for holding extra things. There is a Nanotrasen logo on the back."
icon_state = "duffel-syndieammo"
item_state = "duffel-syndieammo"
/obj/item/storage/backpack/duffelbag/syndie/hitman/PopulateContents()
new /obj/item/clothing/under/lawyer/blacksuit(src)
new /obj/item/clothing/accessory/waistcoat(src)
new /obj/item/clothing/suit/toggle/lawyer/black(src)
new /obj/item/clothing/shoes/laceup(src)
new /obj/item/clothing/gloves/color/black(src)
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/clothing/head/fedora(src)
/obj/item/storage/backpack/duffelbag/syndie/med
name = "medical duffel bag"
desc = "A large duffel bag for holding extra tactical medical supplies."
icon_state = "duffel-syndiemed"
item_state = "duffel-syndiemed"
/obj/item/storage/backpack/duffelbag/syndie/surgery
name = "surgery duffel bag"
desc = "A suspicious looking duffel bag for holding surgery tools."
icon_state = "duffel-syndiemed"
item_state = "duffel-syndiemed"
/obj/item/storage/backpack/duffelbag/syndie/surgery/PopulateContents()
new /obj/item/scalpel(src)
new /obj/item/hemostat(src)
new /obj/item/retractor(src)
new /obj/item/circular_saw(src)
new /obj/item/surgicaldrill(src)
new /obj/item/cautery(src)
new /obj/item/surgical_drapes(src)
new /obj/item/clothing/suit/straight_jacket(src)
new /obj/item/clothing/mask/muzzle(src)
new /obj/item/mmi/syndie(src)
/obj/item/storage/backpack/duffelbag/syndie/ammo
name = "ammunition duffel bag"
desc = "A large duffel bag for holding extra weapons ammunition and supplies."
icon_state = "duffel-syndieammo"
item_state = "duffel-syndieammo"
/obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun
desc = "A large duffel bag, packed to the brim with Bulldog shotgun magazines."
/obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun/PopulateContents()
for(var/i in 1 to 6)
new /obj/item/ammo_box/magazine/m12g(src)
new /obj/item/ammo_box/magazine/m12g/slug(src)
new /obj/item/ammo_box/magazine/m12g/slug(src)
new /obj/item/ammo_box/magazine/m12g/dragon(src)
/obj/item/storage/backpack/duffelbag/syndie/ammo/smg
desc = "A large duffel bag, packed to the brim with C-20r magazines."
/obj/item/storage/backpack/duffelbag/syndie/ammo/smg/PopulateContents()
for(var/i in 1 to 9)
new /obj/item/ammo_box/magazine/smgm45(src)
/obj/item/storage/backpack/duffelbag/syndie/c20rbundle
desc = "A large duffel bag containing a C-20r, some magazines, and a cheap looking suppressor."
/obj/item/storage/backpack/duffelbag/syndie/c20rbundle/PopulateContents()
new /obj/item/ammo_box/magazine/smgm45(src)
new /obj/item/ammo_box/magazine/smgm45(src)
new /obj/item/gun/ballistic/automatic/c20r(src)
new /obj/item/suppressor/specialoffer(src)
/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle
desc = "A large duffel bag containing a Bulldog, some drums, and a pair of thermal imaging glasses."
/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle/PopulateContents()
new /obj/item/gun/ballistic/shotgun/bulldog(src)
new /obj/item/ammo_box/magazine/m12g(src)
new /obj/item/ammo_box/magazine/m12g(src)
new /obj/item/clothing/glasses/thermal/syndi(src)
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle
desc = "A large duffel bag containing a tactical medkit, a Donksoft machine gun, a big jumbo box of riot darts, and a knock-off pair of magboots."
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents()
new /obj/item/clothing/shoes/magboots/syndie(src)
new /obj/item/storage/firstaid/tactical(src)
new /obj/item/gun/ballistic/automatic/l6_saw/toy(src)
new /obj/item/ammo_box/foambox/riot(src)
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle
desc = "A large duffel bag containing a medical equipment, a Donksoft LMG, a big jumbo box of riot darts, and a knock-off pair of magboots."
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents()
new /obj/item/clothing/shoes/magboots/syndie(src)
new /obj/item/storage/firstaid/tactical(src)
new /obj/item/gun/ballistic/automatic/l6_saw/toy(src)
new /obj/item/ammo_box/foambox/riot(src)
/obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle
desc = "A large duffel bag containing deadly chemicals, a handheld chem sprayer, Bioterror foam grenade, a Donksoft assault rifle, box of riot grade darts, a dart pistol, and a box of syringes."
/obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle/PopulateContents()
new /obj/item/reagent_containers/spray/chemsprayer/bioterror(src)
new /obj/item/storage/box/syndie_kit/chemical(src)
new /obj/item/gun/syringe/syndicate(src)
new /obj/item/gun/ballistic/automatic/c20r/toy(src)
new /obj/item/storage/box/syringes(src)
new /obj/item/ammo_box/foambox/riot(src)
new /obj/item/grenade/chem_grenade/bioterrorfoam(src)
if(prob(5))
new /obj/item/reagent_containers/food/snacks/pizza/pineapple(src)
/obj/item/storage/backpack/duffelbag/syndie/c4/PopulateContents()
for(var/i in 1 to 10)
new /obj/item/grenade/plastic/c4(src)
/obj/item/storage/backpack/duffelbag/syndie/x4/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/grenade/plastic/x4(src)
/obj/item/storage/backpack/duffelbag/syndie/firestarter
desc = "A large duffel bag containing a New Russian pyro backpack sprayer, Elite hardsuit, a Stechkin APS pistol, minibomb, ammo, and other equipment."
/obj/item/storage/backpack/duffelbag/syndie/firestarter/PopulateContents()
new /obj/item/clothing/under/syndicate/soviet(src)
new /obj/item/watertank/op(src)
new /obj/item/clothing/suit/space/hardsuit/syndi/elite(src)
new /obj/item/gun/ballistic/automatic/pistol/APS(src)
new /obj/item/ammo_box/magazine/pistolm9mm(src)
new /obj/item/ammo_box/magazine/pistolm9mm(src)
new /obj/item/reagent_containers/food/drinks/bottle/vodka/badminka(src)
new /obj/item/reagent_containers/syringe/stimulants(src)
new /obj/item/grenade/syndieminibomb(src)
// For ClownOps.
/obj/item/storage/backpack/duffelbag/clown/syndie/ComponentInitialize()
. = ..()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
slowdown = 0
STR.silent = TRUE
/obj/item/storage/backpack/duffelbag/clown/syndie/PopulateContents()
new /obj/item/pda/clown(src)
new /obj/item/clothing/under/rank/clown(src)
new /obj/item/clothing/shoes/clown_shoes(src)
new /obj/item/clothing/mask/gas/clown_hat(src)
new /obj/item/bikehorn(src)
new /obj/item/implanter/sad_trombone(src)