/* * Everything derived from the common cardboard box. * Basically everything except the original is a kit (starts full). * * Contains: * Empty box, starter boxes (survival/engineer), * Latex glove and sterile mask boxes, * Syringe, beaker, dna injector boxes, * Blanks, flashbangs, and EMP grenade boxes, * Tracking and chemical implant boxes, * Prescription glasses and drinking glass boxes, * Condiment bottle and silly cup boxes, * Donkpocket and monkeycube boxes, * ID and security PDA cart boxes, * Handcuff, mousetrap, and pillbottle boxes, * Snap-pops and matchboxes, * Replacement light boxes. * Action Figure Boxes * Various paper bags. * * For syndicate call-ins see uplink_kits.dm */ /obj/item/storage/box name = "box" desc = "It's just an ordinary box." icon_state = "box" item_state = "syringe_kit" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' resistance_flags = FLAMMABLE drop_sound = 'sound/items/handling/cardboardbox_drop.ogg' pickup_sound = 'sound/items/handling/cardboardbox_pickup.ogg' var/foldable = /obj/item/stack/sheet/cardboard var/illustration = "writing" /obj/item/storage/box/Initialize(mapload) . = ..() update_icon() /obj/item/storage/box/suicide_act(mob/living/carbon/user) var/obj/item/bodypart/head/myhead = user.get_bodypart(BODY_ZONE_HEAD) if(myhead) user.visible_message(span_suicide("[user] puts [user.p_their()] head into \the [src], and begins closing it! It looks like [user.p_theyre()] trying to commit suicide!")) myhead.dismember() myhead.forceMove(src)//force your enemies to kill themselves with your head collection box! playsound(user,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1) return BRUTELOSS user.visible_message(span_suicide("[user] attempts to put [user.p_their()] head into \the [src], but realizes [user.p_their()] has no head!")) return SHAME /obj/item/storage/box/update_icon() . = ..() if(illustration) cut_overlays() add_overlay(illustration) /obj/item/storage/box/attack_self(mob/user) ..() if(!foldable) return if(contents.len) to_chat(user, span_warning("You can't fold this box with items still inside!")) return if(!ispath(foldable)) return to_chat(user, span_notice("You fold [src] flat.")) var/obj/item/I = new foldable qdel(src) user.put_in_hands(I) /obj/item/storage/box/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/stack/packageWrap)) return 0 return ..() //Mime spell boxes /obj/item/storage/box/mime name = "invisible box" desc = "Unfortunately not large enough to trap the mime." foldable = null icon_state = "box" item_state = null alpha = 0 /obj/item/storage/box/mime/attack_hand(mob/user) ..() if(user.mind.miming) alpha = 255 /obj/item/storage/box/mime/Moved(oldLoc, dir) if (iscarbon(oldLoc)) alpha = 0 ..() //Disk boxes /obj/item/storage/box/disks name = "diskette box" illustration = "disk_kit" /obj/item/storage/box/disks/PopulateContents() for(var/i in 1 to 7) new /obj/item/disk/data(src) /obj/item/storage/box/disks_plantgene name = "plant data disks box" illustration = "disk_kit" /obj/item/storage/box/disks_plantgene/PopulateContents() for(var/i in 1 to 7) new /obj/item/disk/plantgene(src) /obj/item/storage/box/disks_nanite name = "nanite program disks box" illustration = "disk_kit" /obj/item/storage/box/disks_nanite/PopulateContents() for(var/i in 1 to 7) new /obj/item/disk/nanite_program(src) // Ordinary survival box /obj/item/storage/box/survival/PopulateContents() new /obj/item/clothing/mask/breath(src) new /obj/item/tank/internals/emergency_oxygen(src) new /obj/item/reagent_containers/autoinjector/medipen(src) if(HAS_TRAIT(SSstation, STATION_TRAIT_PREMIUM_INTERNALS)) new /obj/item/flashlight/flare(src) new /obj/item/radio/off(src) /obj/item/storage/box/survival/radio/PopulateContents() ..() // we want the survival stuff too. new /obj/item/radio/off(src) /obj/item/storage/box/survival/proc/wardrobe_removal() if(!isplasmaman(loc)) //We need to specially fill the box with plasmaman gear, since it's intended for one return var/obj/item/mask = locate(/obj/item/clothing/mask/breath) in src var/obj/item/internals = locate(/obj/item/tank/internals/emergency_oxygen) in src new /obj/item/tank/internals/plasmaman/belt(src) qdel(mask) // Get rid of the items that shouldn't be qdel(internals) /obj/item/storage/box/survival_mining/PopulateContents() new /obj/item/clothing/mask/gas/explorer(src) new /obj/item/tank/internals/emergency_oxygen(src) new /obj/item/crowbar/red(src) new /obj/item/gps/mining(src) new /obj/item/reagent_containers/autoinjector/medipen(src) // Engineer survival box /obj/item/storage/box/engineer/PopulateContents() new /obj/item/clothing/mask/breath(src) new /obj/item/tank/internals/emergency_oxygen/engi(src) new /obj/item/reagent_containers/autoinjector/medipen(src) /obj/item/storage/box/engineer/radio/PopulateContents() ..() // we want the regular items too. new /obj/item/radio/off(src) // Syndie survival box /obj/item/storage/box/syndie/PopulateContents() new /obj/item/clothing/mask/gas/syndicate(src) new /obj/item/tank/internals/emergency_oxygen/engi(src) new /obj/item/extinguisher/mini(src) // Security survival box /obj/item/storage/box/security/PopulateContents() new /obj/item/clothing/mask/gas/sechailer(src) new /obj/item/tank/internals/emergency_oxygen(src) new /obj/item/reagent_containers/autoinjector/medipen(src) /obj/item/storage/box/security/radio/PopulateContents() ..() // we want the regular stuff too new /obj/item/radio/off(src) // Plasmaman survival box /obj/item/storage/box/plasmaman/PopulateContents() new /obj/item/clothing/mask/breath(src) new /obj/item/tank/internals/plasmaman/belt/full(src) new /obj/item/reagent_containers/autoinjector/medipen(src) /obj/item/storage/box/plasmaman/miner/PopulateContents() //mining box for plasmemes new /obj/item/clothing/mask/gas/explorer(src) new /obj/item/tank/internals/plasmaman/belt/full(src) new /obj/item/crowbar/red(src) new /obj/item/gps/mining(src) new /obj/item/reagent_containers/autoinjector/medipen(src) /obj/item/storage/box/gloves name = "box of latex gloves" desc = "Contains sterile latex gloves." illustration = "latex" /obj/item/storage/box/gloves/PopulateContents() for(var/i in 1 to 7) new /obj/item/clothing/gloves/color/latex(src) /obj/item/storage/box/masks name = "box of sterile masks" desc = "This box contains sterile medical masks." illustration = "sterile" /obj/item/storage/box/masks/PopulateContents() for(var/i in 1 to 7) new /obj/item/clothing/mask/surgical(src) /obj/item/storage/box/syringes name = "box of syringes" desc = "A box full of syringes." illustration = "syringe" /obj/item/storage/box/syringes/PopulateContents() for(var/i in 1 to 7) new /obj/item/reagent_containers/syringe(src) /obj/item/storage/box/syringes/variety name = "syringe variety box" /obj/item/storage/box/syringes/variety/PopulateContents() new /obj/item/reagent_containers/syringe(src) new /obj/item/reagent_containers/syringe/lethal(src) new /obj/item/reagent_containers/syringe/piercing(src) new /obj/item/reagent_containers/syringe/bluespace(src) /obj/item/storage/box/medipens name = "box of medipens" desc = "A box full of epinephrine MediPens." illustration = "syringe" /obj/item/storage/box/medipens/PopulateContents() for(var/i in 1 to 7) new /obj/item/reagent_containers/autoinjector/medipen(src) /obj/item/storage/box/medipens/utility name = "stimpack value kit" desc = "A box with several stimpack medipens for the economical miner." illustration = "syringe" /obj/item/storage/box/medipens/utility/PopulateContents() ..() // includes regular medipens. for(var/i in 1 to 5) new /obj/item/reagent_containers/autoinjector/medipen/stimpack(src) /obj/item/storage/box/beakers name = "box of beakers" illustration = "beaker" /obj/item/storage/box/beakers/PopulateContents() for(var/i in 1 to 7) new /obj/item/reagent_containers/glass/beaker( src ) /obj/item/storage/box/beakers/bluespace name = "box of bluespace beakers" illustration = "beaker" /obj/item/storage/box/beakers/bluespace/PopulateContents() for(var/i in 1 to 7) new /obj/item/reagent_containers/glass/beaker/bluespace(src) /obj/item/storage/box/beakers/variety name = "beaker variety box" /obj/item/storage/box/beakers/variety/PopulateContents() new /obj/item/reagent_containers/glass/beaker(src) new /obj/item/reagent_containers/glass/beaker/large(src) new /obj/item/reagent_containers/glass/beaker/plastic(src) new /obj/item/reagent_containers/glass/beaker/meta(src) new /obj/item/reagent_containers/glass/beaker/noreact(src) new /obj/item/reagent_containers/glass/beaker/bluespace(src) /obj/item/storage/box/vials name = "box of vials" illustration = "vial" /obj/item/storage/box/vials/PopulateContents() for(var/i in 1 to 7) new /obj/item/reagent_containers/glass/bottle/vial(src) /obj/item/storage/box/vials/large name = "box of large vials" /obj/item/storage/box/vials/large/PopulateContents() for(var/i in 1 to 7) new /obj/item/reagent_containers/glass/bottle/vial/large(src) /obj/item/storage/box/vials/bluespace name = "box of bluespace vials" /obj/item/storage/box/vials/bluespace/PopulateContents() for(var/i in 1 to 7) new /obj/item/reagent_containers/glass/bottle/vial/bluespace(src) /obj/item/storage/box/medsprays name = "box of medical sprayers" desc = "A box full of medical sprayers, with unscrewable caps and precision spray heads." /obj/item/storage/box/medsprays/PopulateContents() for(var/i in 1 to 7) new /obj/item/reagent_containers/medspray( src ) /obj/item/storage/box/injectors name = "box of DNA injectors" desc = "This box contains injectors, it seems." /obj/item/storage/box/injectors/PopulateContents() var/static/items_inside = list( /obj/item/dnainjector/h2m = 3, /obj/item/dnainjector/m2h = 3) generate_items_inside(items_inside,src) /obj/item/storage/box/flashbangs name = "box of flashbangs (WARNING)" desc = "WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use." icon_state = "secbox" illustration = "flashbang" /obj/item/storage/box/flashbangs/PopulateContents() for(var/i in 1 to 7) new /obj/item/grenade/flashbang(src) /obj/item/storage/box/flashes name = "box of flashbulbs" desc = "WARNING: Flashes can cause serious eye damage, protective eyewear is required." icon_state = "secbox" illustration = "flashbang" /obj/item/storage/box/flashes/PopulateContents() for(var/i in 1 to 6) new /obj/item/assembly/flash/handheld(src) /obj/item/storage/box/wall_flash name = "wall-mounted flash kit" desc = "This box contains everything necessary to build a wall-mounted flash. WARNING: Flashes can cause serious eye damage, protective eyewear is required." illustration = "flashbang" /obj/item/storage/box/wall_flash/PopulateContents() var/id = rand(1000, 9999) // FIXME what if this conflicts with an existing one? new /obj/item/wallframe/button(src) new /obj/item/electronics/airlock(src) var/obj/item/assembly/control/flasher/remote = new(src) remote.id = id var/obj/item/wallframe/flasher/frame = new(src) frame.id = id new /obj/item/assembly/flash/handheld(src) new /obj/item/screwdriver(src) /obj/item/storage/box/teargas name = "box of tear gas grenades (WARNING)" desc = "WARNING: These devices are extremely dangerous and can cause blindness and skin irritation." illustration = "flashbang" /obj/item/storage/box/teargas/PopulateContents() for(var/i in 1 to 7) new /obj/item/grenade/chem_grenade/teargas(src) /obj/item/storage/box/emps name = "box of emp grenades" desc = "A box with 5 emp grenades." illustration = "flashbang" /obj/item/storage/box/emps/PopulateContents() for(var/i in 1 to 5) new /obj/item/grenade/empgrenade(src) /obj/item/storage/box/trackimp name = "boxed tracking implant kit" desc = "Box full of scum-bag tracking utensils." illustration = "implant" /obj/item/storage/box/trackimp/PopulateContents() var/static/items_inside = list( /obj/item/implantcase/tracking = 4, /obj/item/implanter = 1, /obj/item/implantpad = 1, /obj/item/locator = 1) generate_items_inside(items_inside,src) /obj/item/storage/box/minertracker name = "boxed tracking implant kit" desc = "For finding those who have died on the accursed lavaworld." illustration = "implant" /obj/item/storage/box/minertracker/PopulateContents() var/static/items_inside = list( /obj/item/implantcase/tracking = 4, /obj/item/implanter = 1, /obj/item/computer_hardware/hard_drive/portable/implant_tracker = 1) generate_items_inside(items_inside,src) /obj/item/storage/box/chemimp name = "boxed chemical implant kit" desc = "Box of stuff used to implant chemicals." illustration = "implant" /obj/item/storage/box/chemimp/PopulateContents() var/static/items_inside = list( /obj/item/implantcase/chem = 5, /obj/item/implanter = 1, /obj/item/implantpad = 1) generate_items_inside(items_inside,src) /obj/item/storage/box/exileimp name = "boxed exile implant kit" desc = "Box of exile implants. It has a picture of a clown being booted through the Gateway." illustration = "implant" /obj/item/storage/box/exileimp/PopulateContents() var/static/items_inside = list( /obj/item/implantcase/exile = 5, /obj/item/implanter = 1) generate_items_inside(items_inside,src) /obj/item/storage/box/bodybags name = "body bags" desc = "The label indicates that it contains body bags." illustration = "bodybags" /obj/item/storage/box/bodybags/PopulateContents() ..() for(var/i in 1 to 7) new /obj/item/bodybag(src) /obj/item/storage/box/envirobags name = "environment protection bags" desc = "The label indicates that it contains environment protection bags." illustration = "bodybags" /obj/item/storage/box/envirobags/PopulateContents() ..() for(var/i in 1 to 7) new /obj/item/bodybag/environmental(src) /obj/item/storage/box/rxglasses name = "box of prescription glasses" desc = "This box contains nerd glasses." illustration = "glasses" /obj/item/storage/box/rxglasses/PopulateContents() for(var/i in 1 to 7) new /obj/item/clothing/glasses/regular(src) /obj/item/storage/box/drinkingglasses name = "box of drinking glasses" desc = "It has a picture of drinking glasses on it." /obj/item/storage/box/drinkingglasses/PopulateContents() for(var/i in 1 to 6) new /obj/item/reagent_containers/food/drinks/drinkingglass(src) /obj/item/storage/box/condimentbottles name = "box of condiment bottles" desc = "It has a large ketchup smear on it." /obj/item/storage/box/condimentbottles/PopulateContents() for(var/i in 1 to 6) new /obj/item/reagent_containers/food/condiment(src) /obj/item/storage/box/cups name = "box of paper cups" desc = "It has pictures of paper cups on the front." /obj/item/storage/box/cups/PopulateContents() for(var/i in 1 to 7) new /obj/item/reagent_containers/food/drinks/sillycup( src ) /obj/item/storage/box/donkpockets name = "box of donk-pockets" desc = "Instructions: Heat in microwave." icon_state = "donkpocketbox" illustration=null var/donktype = /obj/item/reagent_containers/food/snacks/donkpocket /obj/item/storage/box/donkpockets/Initialize(mapload) . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.set_holdable(list(/obj/item/reagent_containers/food/snacks/donkpocket)) /obj/item/storage/box/donkpockets/PopulateContents() for(var/i in 1 to 6) new donktype(src) /obj/item/storage/box/donkpockets/donkpocketspicy name = "box of spicy-flavoured donk-pockets" icon_state = "donkpocketboxspicy" donktype = /obj/item/reagent_containers/food/snacks/donkpocket/spicy /obj/item/storage/box/donkpockets/donkpocketteriyaki name = "box of teriyaki-flavoured donk-pockets" icon_state = "donkpocketboxteriyaki" donktype = /obj/item/reagent_containers/food/snacks/donkpocket/teriyaki /obj/item/storage/box/donkpockets/donkpocketpizza name = "box of pizza-flavoured donk-pockets" icon_state = "donkpocketboxpizza" donktype = /obj/item/reagent_containers/food/snacks/donkpocket/pizza /obj/item/storage/box/donkpockets/donkpocketgondola name = "box of gondola-flavoured donk-pockets" icon_state = "donkpocketboxgondola" donktype = /obj/item/reagent_containers/food/snacks/donkpocket/gondola /obj/item/storage/box/donkpockets/donkpocketberry name = "box of berry-flavoured donk-pockets" icon_state = "donkpocketboxberry" donktype = /obj/item/reagent_containers/food/snacks/donkpocket/berry /obj/item/storage/box/donkpockets/donkpockethonk name = "box of banana-flavoured donk-pockets" icon_state = "donkpocketboxbanana" donktype = /obj/item/reagent_containers/food/snacks/donkpocket/honk /obj/item/storage/box/monkeycubes name = "monkey cube box" desc = "Drymate brand monkey cubes. Just add water!" icon_state = "monkeycubebox" illustration = null var/cube_type = /obj/item/reagent_containers/food/snacks/monkeycube /obj/item/storage/box/monkeycubes/Initialize(mapload) . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 7 STR.set_holdable(list(/obj/item/reagent_containers/food/snacks/monkeycube)) /obj/item/storage/box/monkeycubes/PopulateContents() for(var/i in 1 to 5) new cube_type(src) /obj/item/storage/box/monkeycubes/syndicate desc = "Waffle Co. brand monkey cubes. Just add water and a dash of subterfuge!" cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/syndicate /obj/item/storage/box/monkeycubes/syndicate/mice name = "mouse cube box" desc = "Waffle Co. brand mouse cubes. Just add water and a dash of subterfuge!" cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/mouse/syndicate /obj/item/storage/box/monkeycubes/syndicate/mice/Initialize(mapload) . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 24 STR.set_holdable(list(/obj/item/reagent_containers/food/snacks/monkeycube)) /obj/item/storage/box/monkeycubes/syndicate/mice/PopulateContents() for(var/i in 1 to 24) new /obj/item/reagent_containers/food/snacks/monkeycube/mouse/syndicate(src) /obj/item/storage/box/gorillacubes name = "gorilla cube box" desc = "Waffle Co. brand gorilla cubes. Do not taunt." icon_state = "monkeycubebox" illustration = null /obj/item/storage/box/gorillacubes/Initialize(mapload) . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 3 STR.set_holdable(list(/obj/item/reagent_containers/food/snacks/monkeycube)) /obj/item/storage/box/gorillacubes/PopulateContents() for(var/i in 1 to 3) new /obj/item/reagent_containers/food/snacks/monkeycube/gorilla(src) /obj/item/storage/box/mixedcubes name = "mixed farm animal cube box" desc = "Farm Town's new cubes to make your farming dreams come true. Just add water!" icon_state = "monkeycubebox" illustration = null /obj/item/storage/box/mixedcubes/Initialize(mapload) . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 6 STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/monkeycube)) /obj/item/storage/box/mixedcubes/PopulateContents() for(var/i in 1 to 3) new /obj/item/reagent_containers/food/snacks/monkeycube/goat(src) new /obj/item/reagent_containers/food/snacks/monkeycube/sheep(src) new /obj/item/reagent_containers/food/snacks/monkeycube/chicken(src) for(var/i in 1 to 4) new /obj/item/reagent_containers/food/snacks/monkeycube/cow(src) /obj/item/storage/box/ids name = "box of spare IDs" desc = "Has so many empty IDs." illustration = "id" /obj/item/storage/box/ids/PopulateContents() for(var/i in 1 to 7) new /obj/item/card/id(src) //Some spare PDAs in a box /obj/item/storage/box/PDAs name = "spare PDAs" desc = "A box of spare PDA microcomputers." illustration = "pda" /obj/item/storage/box/PDAs/PopulateContents() for(var/i in 1 to 4) new /obj/item/pda(src) new /obj/item/cartridge/head(src) var/newcart = pick( /obj/item/cartridge/engineering, /obj/item/cartridge/security, /obj/item/cartridge/medical, /obj/item/cartridge/signal/toxins, /obj/item/cartridge/quartermaster) new newcart(src) /obj/item/storage/box/silver_ids name = "box of spare silver IDs" desc = "Shiny IDs for important people." illustration = "id" /obj/item/storage/box/silver_ids/PopulateContents() for(var/i in 1 to 7) new /obj/item/card/id/silver(src) /obj/item/storage/box/prisoner name = "box of prisoner IDs" desc = "Take away their last shred of dignity, their name." illustration = "id" /obj/item/storage/box/prisoner/PopulateContents() ..() new /obj/item/card/id/prisoner/one(src) new /obj/item/card/id/prisoner/two(src) new /obj/item/card/id/prisoner/three(src) new /obj/item/card/id/prisoner/four(src) new /obj/item/card/id/prisoner/five(src) new /obj/item/card/id/prisoner/six(src) new /obj/item/card/id/prisoner/seven(src) /obj/item/storage/box/seccarts name = "box of PDA security cartridges" desc = "A box full of PDA cartridges used by Security." illustration = "pda" /obj/item/storage/box/seccarts/PopulateContents() new /obj/item/cartridge/detective(src) for(var/i in 1 to 6) new /obj/item/cartridge/security(src) /obj/item/storage/box/firingpins name = "box of standard firing pins" desc = "A box full of standard firing pins, to allow newly-developed firearms to operate." illustration = "id" /obj/item/storage/box/firingpins/PopulateContents() for(var/i in 1 to 5) new /obj/item/firing_pin(src) /obj/item/storage/box/secfiringpins name = "box of mindshield firing pins" desc = "A box full of mindshield firing pins, to allow newly-developed firearms to operate." illustration = "id" /obj/item/storage/box/secfiringpins/PopulateContents() for(var/i in 1 to 5) new /obj/item/firing_pin/implant/mindshield(src) /obj/item/storage/box/lasertagpins name = "box of laser tag firing pins" desc = "A box full of laser tag firing pins, to allow newly-developed firearms to require wearing brightly coloured plastic armor before being able to be used." illustration = "id" /obj/item/storage/box/lasertagpins/PopulateContents() for(var/i in 1 to 3) new /obj/item/firing_pin/tag/red(src) new /obj/item/firing_pin/tag/blue(src) /obj/item/storage/box/handcuffs name = "box of spare handcuffs" desc = "A box full of handcuffs." icon_state = "secbox" illustration = "handcuff" /obj/item/storage/box/handcuffs/PopulateContents() for(var/i in 1 to 7) new /obj/item/restraints/handcuffs(src) /obj/item/storage/box/zipties name = "box of spare zipties" desc = "A box full of zipties." icon_state = "secbox" illustration = "handcuff" /obj/item/storage/box/zipties/PopulateContents() for(var/i in 1 to 7) new /obj/item/restraints/handcuffs/cable/zipties(src) /obj/item/storage/box/alienhandcuffs name = "box of spare handcuffs" desc = "A box full of handcuffs." icon_state = "alienbox" illustration = "handcuff" /obj/item/storage/box/alienhandcuffs/PopulateContents() for(var/i in 1 to 7) new /obj/item/restraints/handcuffs/alien(src) /obj/item/storage/box/fakesyndiesuit name = "boxed space suit and helmet" desc = "A sleek, sturdy box used to hold replica spacesuits." icon_state = "syndiebox" /obj/item/storage/box/fakesyndiesuit/PopulateContents() new /obj/item/clothing/head/syndicatefake(src) new /obj/item/clothing/suit/syndicatefake(src) /obj/item/storage/box/mousetraps name = "box of Pest-B-Gon mousetraps" desc = span_alert("Keep out of reach of children.") illustration = "mousetrap" /obj/item/storage/box/mousetraps/PopulateContents() for(var/i in 1 to 6) new /obj/item/assembly/mousetrap(src) /obj/item/storage/box/pillbottles name = "box of pill bottles" desc = "It has pictures of pill bottles on its front." illustration = "pillbox" /obj/item/storage/box/pillbottles/PopulateContents() for(var/i in 1 to 7) new /obj/item/storage/pill_bottle(src) /obj/item/storage/box/snappops name = "snap pop box" desc = "Eight wrappers of fun! Ages 8 and up. Not suitable for children." icon = 'icons/obj/toy.dmi' icon_state = "spbox" /obj/item/storage/box/snappops/Initialize(mapload) . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.set_holdable(list(/obj/item/toy/snappop)) STR.max_items = 8 /obj/item/storage/box/snappops/PopulateContents() SEND_SIGNAL(src, COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/toy/snappop) /obj/item/storage/box/matches name = "matchbox" desc = "A small box of Almost But Not Quite Plasma Premium Matches." icon = 'icons/obj/cigarettes.dmi' icon_state = "matchbox" item_state = "zippo" w_class = WEIGHT_CLASS_TINY slot_flags = ITEM_SLOT_BELT drop_sound = 'sound/items/handling/matchbox_drop.ogg' pickup_sound = 'sound/items/handling/matchbox_pickup.ogg' /obj/item/storage/box/matches/Initialize(mapload) . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 10 STR.set_holdable(list(/obj/item/match)) /obj/item/storage/box/matches/PopulateContents() SEND_SIGNAL(src, COMSIG_TRY_STORAGE_FILL_TYPE, /obj/item/match) /obj/item/storage/box/matches/attackby(obj/item/match/W as obj, mob/user as mob, params) if(istype(W, /obj/item/match)) W.matchignite() /obj/item/storage/box/lights name = "box of replacement bulbs" icon = 'icons/obj/storage.dmi' illustration = "light" desc = "This box is shaped on the inside so that only light tubes and bulbs fit." item_state = "syringe_kit" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' foldable = /obj/item/stack/sheet/cardboard //BubbleWrap /obj/item/storage/box/lights/Initialize(mapload) . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 21 STR.set_holdable(list(/obj/item/light/tube, /obj/item/light/bulb)) STR.max_combined_w_class = 21 STR.click_gather = FALSE //temp workaround to re-enable filling the light replacer with the box /obj/item/storage/box/lights/bulbs/PopulateContents() for(var/i in 1 to 21) new /obj/item/light/bulb(src) /obj/item/storage/box/lights/tubes name = "box of replacement tubes" illustration = "lighttube" /obj/item/storage/box/lights/tubes/PopulateContents() for(var/i in 1 to 21) new /obj/item/light/tube(src) /obj/item/storage/box/lights/mixed name = "box of replacement lights" illustration = "lightmixed" /obj/item/storage/box/lights/mixed/PopulateContents() for(var/i in 1 to 14) new /obj/item/light/tube(src) for(var/i in 1 to 7) new /obj/item/light/bulb(src) /obj/item/storage/box/deputy name = "box of deputy armbands" desc = "To be issued to those authorized to act as deputy of security." /obj/item/storage/box/deputy/PopulateContents() for(var/i in 1 to 7) new /obj/item/clothing/accessory/armband/deputy(src) /obj/item/storage/box/metalfoam name = "box of metal foam grenades" desc = "To be used to rapidly seal hull breaches." illustration = "flashbang" /obj/item/storage/box/metalfoam/PopulateContents() for(var/i in 1 to 7) new /obj/item/grenade/chem_grenade/metalfoam(src) /obj/item/storage/box/smart_metal_foam name = "box of smart metal foam grenades" desc = "Used to rapidly seal hull breaches. This variety conforms to the walls of its area." illustration = "flashbang" /obj/item/storage/box/smart_metal_foam/PopulateContents() for(var/i in 1 to 7) new/obj/item/grenade/chem_grenade/smart_metal_foam(src) /obj/item/storage/box/hug name = "box of hugs" desc = "A special box for sensitive people." icon_state = "hugbox" illustration = "heart" foldable = null /obj/item/storage/box/hug/suicide_act(mob/user) user.visible_message(span_suicide("[user] clamps the box of hugs on [user.p_their()] jugular! Guess it wasn't such a hugbox after all..")) return (BRUTELOSS) /obj/item/storage/box/hug/attack_self(mob/user) ..() user.changeNext_move(CLICK_CD_MELEE) playsound(loc, "rustle", 50, 1, -5) user.visible_message(span_notice("[user] hugs \the [src]."),span_notice("You hug \the [src].")) /////clown box & honkbot assembly /obj/item/storage/box/clown name = "clown box" desc = "A colorful cardboard box for the clown" illustration = "clown" /obj/item/storage/box/clown/attackby(obj/item/I, mob/user, params) if((istype(I, /obj/item/bodypart/l_arm/robot)) || (istype(I, /obj/item/bodypart/r_arm/robot))) if(contents.len) //prevent accidently deleting contents to_chat(user, span_warning("You need to empty [src] out first!")) return if(!user.temporarilyRemoveItemFromInventory(I)) return qdel(I) to_chat(user, span_notice("You add some wheels to the [src]! You've got a honkbot assembly now! Honk!")) var/obj/item/bot_assembly/honkbot/A = new qdel(src) user.put_in_hands(A) else return ..() ////// /obj/item/storage/box/hug/medical/PopulateContents() new /obj/item/stack/medical/bruise_pack(src) new /obj/item/stack/medical/ointment(src) new /obj/item/reagent_containers/autoinjector/medipen(src) /obj/item/storage/box/hug/survival/PopulateContents() new /obj/item/clothing/mask/breath(src) new /obj/item/tank/internals/emergency_oxygen(src) new /obj/item/reagent_containers/autoinjector/medipen(src) if(HAS_TRAIT(SSstation, STATION_TRAIT_PREMIUM_INTERNALS)) new /obj/item/flashlight/flare(src) new /obj/item/radio/off(src) /obj/item/storage/box/rubbershot name = "box of rubber shots" desc = "A box full of rubber shots designed for shotguns. The box itself is designed for holding any kind of shotgun shell." icon_state = "rubbershot_box" illustration = null /obj/item/storage/box/rubbershot/Initialize(mapload) . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 7 STR.set_holdable(list(/obj/item/ammo_casing/shotgun)) /obj/item/storage/box/rubbershot/PopulateContents() for(var/i in 1 to 7) new /obj/item/ammo_casing/shotgun/rubbershot(src) /obj/item/storage/box/lethalshot name = "box of lethal shotgun shots" desc = "A box full of lethal shots designed for shotguns. The box itself is designed for holding any kind of shotgun shell." icon_state = "lethalshot_box" illustration = null /obj/item/storage/box/lethalshot/Initialize(mapload) . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 7 STR.set_holdable(list(/obj/item/ammo_casing/shotgun)) /obj/item/storage/box/lethalshot/PopulateContents() for(var/i in 1 to 7) new /obj/item/ammo_casing/shotgun/buckshot(src) /obj/item/storage/box/breacherslug name = "box of breaching shotgun shells" desc = "A box full of breaching slugs designed for rapid entry. The box itself is designed for holding any kind of shotgun shell." icon_state = "breachershot_box" illustration = null /obj/item/storage/box/breacherslug/Initialize(mapload) . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 7 STR.set_holdable(list(/obj/item/ammo_casing/shotgun)) /obj/item/storage/box/breacherslug/PopulateContents() for(var/i in 1 to 7) new /obj/item/ammo_casing/shotgun/breacher(src) /obj/item/storage/box/beanbag name = "box of beanbags" desc = "A box full of beanbag shells designed for shotguns. The box itself is designed for holding any kind of shotgun shell." icon_state = "rubbershot_box" illustration = null /obj/item/storage/box/beanbag/Initialize(mapload) . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 7 STR.set_holdable(list(/obj/item/ammo_casing/shotgun)) /obj/item/storage/box/beanbag/PopulateContents() for(var/i in 1 to 7) new /obj/item/ammo_casing/shotgun/beanbag(src) /obj/item/storage/box/actionfigure name = "box of action figures" desc = "The latest set of collectable action figures." icon_state = "box" /obj/item/storage/box/actionfigure/PopulateContents() for(var/i in 1 to 4) var/randomFigure = pick(subtypesof(/obj/item/toy/figure)) new randomFigure(src) #define NODESIGN "None" #define NANOTRASEN "NanotrasenStandard" #define SYNDI "SyndiSnacks" #define HEART "Heart" #define SMILEY "SmileyFace" /obj/item/storage/box/papersack name = "paper sack" desc = "A sack neatly crafted out of paper." icon_state = "paperbag_None" item_state = "paperbag_None" resistance_flags = FLAMMABLE foldable = null var/design = NODESIGN /obj/item/storage/box/papersack/update_icon() if(contents.len == 0) icon_state = "[item_state]" else icon_state = "[item_state]_closed" /obj/item/storage/box/papersack/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/pen)) //if a pen is used on the sack, dialogue to change its design appears if(contents.len) to_chat(user, span_warning("You can't modify [src] with items still inside!")) return var/list/designs = list(NODESIGN, NANOTRASEN, SYNDI, HEART, SMILEY, "Cancel") var/switchDesign = input("Select a Design:", "Paper Sack Design", designs[1]) in designs if(get_dist(usr, src) > 1) to_chat(usr, span_warning("You have moved too far away!")) return var/choice = designs.Find(switchDesign) if(design == designs[choice] || designs[choice] == "Cancel") return 0 to_chat(usr, span_notice("You make some modifications to [src] using your pen.")) design = designs[choice] icon_state = "paperbag_[design]" item_state = "paperbag_[design]" switch(designs[choice]) if(NODESIGN) desc = "A sack neatly crafted out of paper." if(NANOTRASEN) desc = "A standard Nanotrasen paper lunch sack for loyal employees on the go." if(SYNDI) desc = "The design on this paper sack is a remnant of the notorious 'SyndieSnacks' program." if(HEART) desc = "A paper sack with a heart etched onto the side." if(SMILEY) desc = "A paper sack with a crude smile etched onto the side." return 0 else if(W.is_sharp()) if(!contents.len) if(item_state == "paperbag_None") user.show_message(span_notice("You cut eyeholes into [src]."), MSG_VISUAL) new /obj/item/clothing/head/papersack(user.loc) qdel(src) return 0 else if(item_state == "paperbag_SmileyFace") user.show_message(span_notice("You cut eyeholes into [src] and modify the design."), MSG_VISUAL) new /obj/item/clothing/head/papersack/smiley(user.loc) qdel(src) return 0 return ..() #undef NODESIGN #undef NANOTRASEN #undef SYNDI #undef HEART #undef SMILEY /obj/item/storage/box/ingredients //This box is for the randomely chosen version the chef spawns with, it shouldn't actually exist. name = "ingredients box" illustration = "fruit" var/theme_name /obj/item/storage/box/ingredients/Initialize(mapload) . = ..() if(theme_name) name = "[name] ([theme_name])" desc = "A box containing supplementary ingredients for the aspiring chef. The box's theme is '[theme_name]'." item_state = "syringe_kit" /obj/item/storage/box/ingredients/wildcard theme_name = "wildcard" /obj/item/storage/box/ingredients/wildcard/PopulateContents() for(var/i in 1 to 7) var/randomFood = pick(/obj/item/reagent_containers/food/snacks/grown/chili, /obj/item/reagent_containers/food/snacks/grown/tomato, /obj/item/reagent_containers/food/snacks/grown/carrot, /obj/item/reagent_containers/food/snacks/grown/potato, /obj/item/reagent_containers/food/snacks/grown/potato/sweet, /obj/item/reagent_containers/food/snacks/grown/apple, /obj/item/reagent_containers/food/snacks/chocolatebar, /obj/item/reagent_containers/food/snacks/grown/cherries, /obj/item/reagent_containers/food/snacks/grown/banana, /obj/item/reagent_containers/food/snacks/grown/cabbage, /obj/item/reagent_containers/food/snacks/grown/soybeans, /obj/item/reagent_containers/food/snacks/grown/corn, /obj/item/reagent_containers/food/snacks/grown/mushroom/plumphelmet, /obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle) new randomFood(src) /obj/item/storage/box/ingredients/fiesta theme_name = "fiesta" /obj/item/storage/box/ingredients/fiesta/PopulateContents() new /obj/item/reagent_containers/food/snacks/tortilla(src) for(var/i in 1 to 2) new /obj/item/reagent_containers/food/snacks/grown/corn(src) new /obj/item/reagent_containers/food/snacks/grown/soybeans(src) new /obj/item/reagent_containers/food/snacks/grown/chili(src) /obj/item/storage/box/ingredients/italian theme_name = "italian" /obj/item/storage/box/ingredients/italian/PopulateContents() for(var/i in 1 to 3) new /obj/item/reagent_containers/food/snacks/grown/tomato(src) new /obj/item/reagent_containers/food/snacks/meatball(src) //YOGS - bigotry rule new /obj/item/reagent_containers/food/drinks/bottle/wine(src) /obj/item/storage/box/ingredients/vegetarian theme_name = "vegetarian" /obj/item/storage/box/ingredients/vegetarian/PopulateContents() for(var/i in 1 to 2) new /obj/item/reagent_containers/food/snacks/grown/carrot(src) new /obj/item/reagent_containers/food/snacks/grown/eggplant(src) new /obj/item/reagent_containers/food/snacks/grown/potato(src) new /obj/item/reagent_containers/food/snacks/grown/apple(src) new /obj/item/reagent_containers/food/snacks/grown/corn(src) new /obj/item/reagent_containers/food/snacks/grown/tomato(src) /obj/item/storage/box/ingredients/american theme_name = "american" /obj/item/storage/box/ingredients/american/PopulateContents() for(var/i in 1 to 2) new /obj/item/reagent_containers/food/snacks/grown/potato(src) new /obj/item/reagent_containers/food/snacks/grown/tomato(src) new /obj/item/reagent_containers/food/snacks/grown/corn(src) new /obj/item/reagent_containers/food/snacks/meatball(src) //YOGS - bigotry rule /obj/item/storage/box/ingredients/fruity theme_name = "fruity" /obj/item/storage/box/ingredients/fruity/PopulateContents() for(var/i in 1 to 2) new /obj/item/reagent_containers/food/snacks/grown/apple(src) new /obj/item/reagent_containers/food/snacks/grown/citrus/orange(src) new /obj/item/reagent_containers/food/snacks/grown/citrus/lemon(src) new /obj/item/reagent_containers/food/snacks/grown/citrus/lime(src) new /obj/item/reagent_containers/food/snacks/grown/watermelon(src) /obj/item/storage/box/ingredients/sweets theme_name = "sweets" /obj/item/storage/box/ingredients/sweets/PopulateContents() for(var/i in 1 to 2) new /obj/item/reagent_containers/food/snacks/grown/cherries(src) new /obj/item/reagent_containers/food/snacks/grown/banana(src) new /obj/item/reagent_containers/food/snacks/chocolatebar(src) new /obj/item/reagent_containers/food/snacks/grown/cocoapod(src) new /obj/item/reagent_containers/food/snacks/grown/apple(src) /obj/item/storage/box/ingredients/delights theme_name = "delights" /obj/item/storage/box/ingredients/delights/PopulateContents() for(var/i in 1 to 2) new /obj/item/reagent_containers/food/snacks/grown/potato/sweet(src) new /obj/item/reagent_containers/food/snacks/grown/bluecherries(src) new /obj/item/reagent_containers/food/snacks/grown/vanillapod(src) new /obj/item/reagent_containers/food/snacks/grown/cocoapod(src) new /obj/item/reagent_containers/food/snacks/grown/berries(src) /obj/item/storage/box/ingredients/grains theme_name = "grains" /obj/item/storage/box/ingredients/grains/PopulateContents() for(var/i in 1 to 3) new /obj/item/reagent_containers/food/snacks/grown/oat(src) new /obj/item/reagent_containers/food/snacks/grown/wheat(src) new /obj/item/reagent_containers/food/snacks/grown/cocoapod(src) new /obj/item/reagent_containers/honeycomb(src) new /obj/item/seeds/poppy(src) /obj/item/storage/box/ingredients/carnivore theme_name = "carnivore" /obj/item/storage/box/ingredients/carnivore/PopulateContents() new /obj/item/reagent_containers/food/snacks/meat/slab/bear(src) new /obj/item/reagent_containers/food/snacks/meat/slab/spider(src) new /obj/item/reagent_containers/food/snacks/spidereggs(src) new /obj/item/reagent_containers/food/snacks/carpmeat(src) new /obj/item/reagent_containers/food/snacks/meat/slab/xeno(src) new /obj/item/reagent_containers/food/snacks/meat/slab/corgi(src) new /obj/item/reagent_containers/food/snacks/meatball(src) //YOGS - bigotry rule /obj/item/storage/box/ingredients/exotic theme_name = "exotic" /obj/item/storage/box/ingredients/exotic/PopulateContents() for(var/i in 1 to 2) new /obj/item/reagent_containers/food/snacks/carpmeat(src) new /obj/item/reagent_containers/food/snacks/grown/soybeans(src) new /obj/item/reagent_containers/food/snacks/grown/cabbage(src) new /obj/item/reagent_containers/food/snacks/grown/chili(src) /obj/item/storage/box/cheese name = "box of advanced cheese bacteria" /obj/item/storage/box/cheese/PopulateContents() new /obj/item/reagent_containers/food/condiment/mesophilic(src) new /obj/item/reagent_containers/food/condiment/thermophilic(src) new /obj/item/reagent_containers/food/condiment/pcandidum(src) new /obj/item/reagent_containers/food/condiment/proqueforti(src) /obj/item/storage/box/emptysandbags name = "box of empty sandbags" /obj/item/storage/box/emptysandbags/PopulateContents() for(var/i in 1 to 7) new /obj/item/emptysandbag(src) /obj/item/storage/box/rndboards name = "\proper the liberator's legacy" desc = "A box containing a gift for worthy golems." /obj/item/storage/box/rndboards/PopulateContents() new /obj/item/circuitboard/machine/protolathe(src) new /obj/item/circuitboard/machine/destructive_analyzer(src) new /obj/item/circuitboard/machine/circuit_imprinter(src) new /obj/item/circuitboard/computer/rdconsole(src) /obj/item/storage/box/rndboards/miner name = "\proper Morokha Heavy Industries Research and Development Kit" desc = "A box containing the essential circuit boards for research and development. Materials, stock parts, and intelligence not included." /obj/item/storage/box/rndboards/miner/PopulateContents() new /obj/item/circuitboard/machine/autolathe(src) new /obj/item/circuitboard/machine/protolathe(src) new /obj/item/circuitboard/machine/destructive_analyzer(src) new /obj/item/circuitboard/machine/circuit_imprinter(src) new /obj/item/circuitboard/computer/rdconsole/ruin(src) /obj/item/storage/box/silver_sulf name = "box of silver sulfadiazine patches" desc = "Contains patches used to treat burns." /obj/item/storage/box/silver_sulf/PopulateContents() for(var/i in 1 to 7) new /obj/item/reagent_containers/pill/patch/silver_sulf(src) /obj/item/storage/box/fountainpens name = "box of fountain pens" /obj/item/storage/box/fountainpens/PopulateContents() for(var/i in 1 to 7) new /obj/item/pen/fountain(src) /obj/item/storage/box/holy_grenades name = "box of holy hand grenades" desc = "Contains several grenades used to rapidly purge heresy." illustration = "flashbang" /obj/item/storage/box/holy_grenades/PopulateContents() for(var/i in 1 to 7) new/obj/item/grenade/chem_grenade/holy(src) /obj/item/storage/box/stockparts/basic //for ruins where it's a bad idea to give access to an autolathe/protolathe, but still want to make stock parts accessible name = "box of stock parts" desc = "Contains a variety of basic stock parts." /obj/item/storage/box/stockparts/basic/PopulateContents() var/static/items_inside = list( /obj/item/stock_parts/capacitor = 3, /obj/item/stock_parts/scanning_module = 3, /obj/item/stock_parts/manipulator = 3, /obj/item/stock_parts/micro_laser = 3, /obj/item/stock_parts/matter_bin = 3) generate_items_inside(items_inside,src) /obj/item/storage/box/stockparts/deluxe name = "box of deluxe stock parts" desc = "Contains a variety of deluxe stock parts." icon_state = "syndiebox" /obj/item/storage/box/stockparts/deluxe/PopulateContents() var/static/items_inside = list( /obj/item/stock_parts/capacitor/quadratic = 3, /obj/item/stock_parts/scanning_module/triphasic = 3, /obj/item/stock_parts/manipulator/femto = 3, /obj/item/stock_parts/micro_laser/quadultra = 3, /obj/item/stock_parts/matter_bin/bluespace = 3) generate_items_inside(items_inside,src) /obj/item/storage/box/dishdrive name = "DIY Dish Drive Kit" desc = "Contains everything you need to build your own Dish Drive!" custom_premium_price = 200 /obj/item/storage/box/dishdrive/PopulateContents() var/static/items_inside = list( /obj/item/stack/sheet/metal/five = 1, /obj/item/stack/cable_coil/random/five = 1, /obj/item/circuitboard/machine/dish_drive = 1, /obj/item/stack/sheet/glass = 1, /obj/item/stock_parts/manipulator = 1, /obj/item/stock_parts/matter_bin = 2, /obj/item/screwdriver = 1) generate_items_inside(items_inside,src) /obj/item/storage/box/materials name = "Materials Box" desc = "Contains most of what you would need" /obj/item/storage/box/materials/PopulateContents() var/static/items_inside = list( /obj/item/stack/sheet/metal/fifty = 2, /obj/item/stack/sheet/glass/fifty = 2, /obj/item/stack/rods/fifty = 2, /obj/item/stack/sheet/plasteel/fifty = 2, /obj/item/stack/sheet/plastic/fifty = 2, /obj/item/stack/sheet/plastitaniumglass/fifty = 2, /obj/item/stack/sheet/titaniumglass/fifty = 2, /obj/item/stack/sheet/plasmaglass/fifty = 2, /obj/item/stack/sheet/rglass/fifty = 2, /obj/item/stack/sheet/mineral/plastitanium/fifty = 1, /obj/item/stack/sheet/mineral/wood/fifty = 1, /obj/item/stack/sheet/mineral/titanium/fifty = 1, /obj/item/stack/sheet/mineral/uranium/fifty = 1, /obj/item/stack/sheet/mineral/diamond = 1, /obj/item/stack/sheet/mineral/plasma/fifty = 1, /obj/item/stack/sheet/mineral/gold/fifty = 1, /obj/item/stack/sheet/mineral/silver/fifty = 1, /obj/item/stack/sheet/mineral/bananium/fifty = 1) generate_items_inside(items_inside,src) /obj/item/storage/box/materials/Initialize(mapload) . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_combined_w_class = 200 STR.max_items = 30 STR.max_w_class = WEIGHT_CLASS_GIGANTIC