/* * Backpack */ /obj/item/storage/backpack name = "backpack" desc = "You wear this on your back and put items into it." icon_state = "backpack" lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing_righthand.dmi' w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK //ERROOOOO max_w_class = WEIGHT_CLASS_NORMAL max_combined_w_class = 21 storage_slots = 21 max_integrity = 300 sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/back.dmi', "Grey" = 'icons/mob/clothing/species/grey/back.dmi', "Skkulakin" = 'icons/mob/clothing/species/skkulakin/back.dmi' ) /obj/item/storage/backpack/attackby__legacy__attackchain(obj/item/W as obj, mob/user as mob, params) if(Adjacent(user)) playsound(src.loc, "rustle", 50, TRUE, -5) return ..() /obj/item/storage/backpack/examine(mob/user) var/space_used = 0 . = ..() if(Adjacent(user)) for(var/obj/item/I in contents) space_used += I.w_class if(!space_used) . += SPAN_NOTICE("[src] is empty.") else if(space_used <= max_combined_w_class * 0.6) . += SPAN_NOTICE("[src] still has plenty of remaining space.") else if(space_used <= max_combined_w_class * 0.8) . += SPAN_NOTICE("[src] is beginning to run out of space.") else if(space_used < max_combined_w_class) . += SPAN_NOTICE("[src] doesn't have much space left.") else . += SPAN_NOTICE("[src] is full.") /* * Backpack Types */ /obj/item/storage/backpack/holding name = "Bag of Holding" desc = "A bleeding-edge backpack that uses bluespace technology to create a localized dimensional pocket for storage." origin_tech = "bluespace=5;materials=4;engineering=4;plasmatech=5" icon_state = "holdingpack" max_w_class = WEIGHT_CLASS_BULKY max_combined_w_class = 28 resistance_flags = FIRE_PROOF flags_2 = NO_MAT_REDEMPTION_2 cant_hold = list(/obj/item/storage/backpack, /obj/item/storage/belt/bluespace) cant_hold_override = list(/obj/item/storage/backpack/satchel_flat) armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 60, ACID = 50) allow_same_size = TRUE /obj/item/storage/backpack/holding/attackby__legacy__attackchain(obj/item/W, mob/user, params) if(istype(W, /obj/item/storage/backpack/holding)) var/response = tgui_alert(user, "This creates a singularity, destroying you and much of the station. Are you SURE?", "IMMINENT DEATH!", list("No", "Yes")) if(response == "Yes") user.visible_message(SPAN_WARNING("[user] grins as [user.p_they()] begin[user.p_s()] to put a Bag of Holding into a Bag of Holding!"), SPAN_WARNING("You begin to put the Bag of Holding into the Bag of Holding!")) if(do_after(user, 30, target=src)) if(GLOB.disable_explosions) if(istype(user)) to_chat(user, SPAN_USERDANGER("You seem to stuff yourself into the quantum hellscape between the two bags. That wasn't wise.")) user.gib() return investigate_log("has become a singularity. Caused by [user.key]",INVESTIGATE_SINGULO) user.visible_message(SPAN_WARNING("[user] erupts in evil laughter as [user.p_they()] put[user.p_s()] the Bag of Holding into another Bag of Holding!"), SPAN_WARNING("You can't help but laugh wildly as you put the Bag of Holding into another Bag of Holding, complete darkness surrounding you."),SPAN_DANGER(" You hear the sound of scientific evil brewing!")) qdel(W) var/obj/singularity/singulo = new /obj/singularity(get_turf(user)) singulo.energy = 300 //To give it a small boost message_admins("[key_name_admin(user)] detonated a bag of holding JMP)") log_game("[key_name(user)] detonated a bag of holding") qdel(src) else user.visible_message("After careful consideration, [user] has decided that putting a Bag of Holding inside another Bag of Holding would not yield the ideal outcome.","You come to the realization that this might not be the greatest idea.") else . = ..() /obj/item/storage/backpack/holding/singularity_act(current_size) var/dist = max((current_size - 2), 1) explosion(loc, dist, (dist * 2), (dist * 4), cause = "Bag of Holding (singularity_act)") /obj/item/storage/backpack/santabag name = "Santa's Gift Bag" desc = "Space Santa uses this to deliver toys to all the nice children in space on Christmas! Wow, it's pretty big!" icon_state = "giftbag0" max_combined_w_class = 400 // can store a ton of shit! /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" inhand_icon_state = "backpack" /obj/item/storage/backpack/clown name = "Giggles Von Honkerton" desc = "It's a backpack made by Honk! Co." icon_state = "clownpack" /obj/item/storage/backpack/clown/syndie/populate_contents() new /obj/item/clothing/under/rank/civilian/clown(src) new /obj/item/clothing/shoes/magboots/clown(src) new /obj/item/clothing/mask/chameleon/voice_change(src) new /obj/item/radio/headset/headset_service(src) new /obj/item/pda/clown(src) new /obj/item/storage/box/survival(src) new /obj/item/food/grown/banana(src) new /obj/item/stamp/clown(src) new /obj/item/toy/crayon/rainbow(src) new /obj/item/storage/fancy/crayons(src) new /obj/item/reagent_containers/spray/waterflower(src) new /obj/item/reagent_containers/drinks/bottle/bottleofbanana(src) new /obj/item/instrument/bikehorn(src) new /obj/item/bikehorn(src) new /obj/item/dnainjector/comic(src) for(var/i in 1 to 10) new /obj/item/ammo_box/magazine/m12g/confetti(src) for(var/i in 1 to 5) new /obj/item/grenade/confetti(src) new /obj/item/gun/projectile/revolver/capgun(src) /obj/item/storage/backpack/mime name = "Pierre the Panda" desc = "A backpack modelled after Pierre the Panda - the official mascot for the Université du Mime." icon_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" /obj/item/storage/backpack/security name = "security backpack" desc = "It's a very robust backpack." icon_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" resistance_flags = FIRE_PROOF /obj/item/storage/backpack/industrial name = "industrial backpack" desc = "It's a tough backpack for the daily grind of station life." icon_state = "engiepack" inhand_icon_state = "backpack" resistance_flags = FIRE_PROOF /obj/item/storage/backpack/industrial/atmos name = "atmospherics backpack" desc = "It's a fireproof backpack for Atmospherics Staff." icon_state = "atmospack" /obj/item/storage/backpack/explorer name = "explorer bag" desc = "A robust backpack for stashing your loot." icon_state = "explorerpack" /obj/item/storage/backpack/botany name = "botany backpack" desc = "It's a backpack made of all-natural fibers." icon_state = "botpack" /obj/item/storage/backpack/chemistry name = "chemistry backpack" desc = "A backpack specially designed to repel stains and hazardous liquids." icon_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" /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" resistance_flags = FIRE_PROOF /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" /obj/item/storage/backpack/blueshield name = "blueshield backpack" desc = "A robust backpack issued to Nanotrasen's finest." icon_state = "blueshieldpack" /obj/item/storage/backpack/robotics name = "robotics backpack" desc = "A specially designed backpack. It's fire resistant and smells vaguely of welding fuel." icon_state = "robopack" inhand_icon_state = "backpack" resistance_flags = FIRE_PROOF /* * Satchel Types */ /obj/item/storage/backpack/satchel name = "leather satchel" desc = "It's a very fancy satchel made with fine leather." icon_state = "satchel" inhand_icon_state = "satchel" resistance_flags = FIRE_PROOF var/strap_side_straight = FALSE /obj/item/storage/backpack/satchel/examine(mob/user) . = ..() . += SPAN_NOTICE("You can Alt-Shift-Click [src] to flip its strap side.") /obj/item/storage/backpack/satchel/AltShiftClick(mob/user) if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user)) return strap_side_straight = !strap_side_straight worn_icon_state = "satchel[strap_side_straight ? "-flipped" : ""]" if(user.back == src) user.update_inv_back() /obj/item/storage/backpack/satchel/withwallet/populate_contents() new /obj/item/storage/wallet/random(src) /obj/item/storage/backpack/satcheldeluxe name = "leather satchel" desc = "An NT Deluxe satchel, with the finest quality leather and the company logo in a thin gold stitch." icon_state = "nt_deluxe" worn_icon_state = "satchel" inhand_icon_state = "satchel" /obj/item/storage/backpack/satchel_lizard name = "lizard skin handbag" desc = "A handbag made out of what appears to be supple green Unathi skin. A face can be vaguely seen on the front." icon_state = "satchel-lizard" /obj/item/storage/backpack/satchel_norm name = "satchel" desc = "A deluxe NT Satchel, made of the highest quality leather." icon_state = "satchel-norm" /obj/item/storage/backpack/satchel_clown name = "Tickles Von Squeakerton" desc = "A satchel with extra pockets for all your banana storing needs!" icon_state = "satchel-clown" /obj/item/storage/backpack/satchel_eng name = "industrial satchel" desc = "A tough satchel with extra pockets." icon_state = "satchel-eng" resistance_flags = FIRE_PROOF /obj/item/storage/backpack/satchel_atmos name = "atmospherics satchel" desc = "A fireproof satchel for keeping gear safe." icon_state = "satchel-atmos" resistance_flags = FIRE_PROOF /obj/item/storage/backpack/satchel_explorer name = "explorer satchel" desc = "A robust satchel for stashing your loot." icon_state = "satchel-explorer" /obj/item/storage/backpack/satchel_med name = "medical satchel" desc = "A sterile satchel used in medical departments." icon_state = "satchel-med" /obj/item/storage/backpack/satchel_vir name = "virologist satchel" desc = "A sterile satchel with virologist colours." icon_state = "satchel-vir" worn_icon_state = null inhand_icon_state = null /obj/item/storage/backpack/satchel_chem name = "chemist satchel" desc = "A sterile satchel with chemist colours." icon_state = "satchel-chem" /obj/item/storage/backpack/satchel_gen name = "geneticist satchel" desc = "A sterile satchel with geneticist colours." icon_state = "satchel-gen" /obj/item/storage/backpack/satchel_tox name = "scientist satchel" desc = "Useful for holding research materials." icon_state = "satchel-tox" resistance_flags = FIRE_PROOF /obj/item/storage/backpack/satchel_sec name = "security satchel" desc = "A robust satchel for security related needs." icon_state = "satchel-sec" /obj/item/storage/backpack/satchel_hyd name = "hydroponics satchel" desc = "A green satchel for plant related work." icon_state = "satchel-hyd" /obj/item/storage/backpack/satchel_cap name = "captain's satchel" desc = "An exclusive satchel for Nanotrasen officers." icon_state = "satchel-cap" resistance_flags = FIRE_PROOF /obj/item/storage/backpack/satchel_blueshield name = "blueshield satchel" desc = "A robust satchel issued to Nanotrasen's finest." icon_state = "satchel-blueshield" /obj/item/storage/backpack/satchel_robo name = "bioengineer satchel" desc = "A black satchel designed for holding repair equipment." icon_state = "satchel-robo" inhand_icon_state = "satchel-norm" resistance_flags = FIRE_PROOF /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. max_combined_w_class = 15 level = 1 cant_hold = list(/obj/item/storage/backpack/satchel_flat) //muh recursive backpacks /obj/item/storage/backpack/satchel_flat/hide(intact) if(intact) invisibility = INVISIBILITY_MAXIMUM anchored = TRUE //otherwise you can start pulling, cover it, and drag around an invisible backpack. icon_state = "[initial(icon_state)]2" else invisibility = initial(invisibility) anchored = FALSE icon_state = initial(icon_state) /obj/item/storage/backpack/satchel_flat/populate_contents() new /obj/item/stack/tile/plasteel(src) new /obj/item/crowbar(src) /* * Duffelbags */ /obj/item/storage/backpack/duffel name = "duffelbag" desc = "A large grey duffelbag designed to hold more items than a regular bag. It slows you down when unzipped." icon_state = "duffel" max_combined_w_class = 30 /// Is the bag zipped up? var/zipped = TRUE /// How long it takes to toggle the zip state of this bag var/zip_time = 0.7 SECONDS /// This variable is used to change the icon state to the variable when opened var/open_icon_sprite /// Do we want the bag to be antidropped when zipped up? var/antidrop_on_zip = FALSE /obj/item/storage/backpack/duffel/examine(mob/user) . = ..() . += SPAN_NOTICE("It is currently [zipped ? "zipped" : "unzipped"]. Alt+Shift+Click to [zipped ? "un-" : ""]zip it!") /obj/item/storage/backpack/duffel/AltShiftClick(mob/user) handle_zipping(user) /obj/item/storage/backpack/duffel/proc/handle_zipping(mob/user) if(!Adjacent(user)) return visible_message( SPAN_NOTICE("[user] tries to [zipped ? "un-" : ""]zip [src]."), SPAN_NOTICE("You start to [zipped ? "un-" : ""]zip [src].") ) if(!zip_time || do_after(user, zip_time, target = src)) playsound(src, 'sound/items/zip.ogg', 75, TRUE) zipped = !zipped if(!zipped) // Handle slowdown and stuff now that we just zipped it show_to(user) if(zip_time) slowdown = 1 if(antidrop_on_zip) set_nodrop(NODROP_TOGGLE, user) update_icon(UPDATE_ICON_STATE) return slowdown = 0 hide_from_all() for(var/obj/item/storage/container in src) container.hide_from_all() // Hide everything inside the bag too if(antidrop_on_zip) set_nodrop(TRUE, user) update_icon(UPDATE_ICON_STATE) /obj/item/storage/backpack/duffel/update_icon_state() . = ..() if(!zipped) if(open_icon_sprite) icon_state = open_icon_sprite else if(open_icon_sprite) icon_state = initial(icon_state) // The following three procs handle refusing access to contents if the duffel is zipped /obj/item/storage/backpack/duffel/handle_item_insertion(obj/item/I, mob/user, prevent_warning, bypass_zip = FALSE) if(bypass_zip) return ..() if(zipped) to_chat(usr, SPAN_NOTICE("[src] is zipped shut!")) return FALSE return ..() /obj/item/storage/backpack/duffel/removal_allowed_check(mob/user) if(zipped) to_chat(user, SPAN_NOTICE("[src] is zipped shut!")) return FALSE return TRUE /obj/item/storage/backpack/duffel/drop_inventory(user) if(zipped) to_chat(usr, SPAN_NOTICE("[src] is zipped shut!")) return FALSE return ..() /obj/item/storage/backpack/duffel/show_to(mob/user) if(isobserver(user)) return ..() if(zipped) to_chat(usr, SPAN_NOTICE("[src] is zipped shut!")) return FALSE return ..() /obj/item/storage/backpack/duffel/syndie name = "suspicious looking duffelbag" desc = "A large duffelbag for holding extra tactical supplies." icon_state = "duffel-syndiammo" origin_tech = "syndicate=1" silent = TRUE zip_time = 0 resistance_flags = FIRE_PROOF /obj/item/storage/backpack/duffel/syndie/med name = "suspicious duffelbag" desc = "A black and red duffelbag with a red and white cross sewn onto it." icon_state = "duffel-syndimed" /obj/item/storage/backpack/duffel/syndie/shotgun desc = "A large duffelbag, packed to the brim with Bulldog shotgun ammo." /obj/item/storage/backpack/duffel/syndie/shotgun/populate_contents() for(var/i in 1 to 6) new /obj/item/ammo_box/magazine/m12g(src) new /obj/item/ammo_box/magazine/m12g/buckshot(src) new /obj/item/ammo_box/magazine/m12g/buckshot(src) new /obj/item/ammo_box/magazine/m12g/dragon(src) /obj/item/storage/backpack/duffel/syndie/shotgun_xl_mags desc = "A large duffelbag, containing three types of extended drum magazines." /obj/item/storage/backpack/duffel/syndie/shotgun_xl_mags/populate_contents() new /obj/item/ammo_box/magazine/m12g/xtr_lrg(src) new /obj/item/ammo_box/magazine/m12g/xtr_lrg(src) new /obj/item/ammo_box/magazine/m12g/xtr_lrg(src) new /obj/item/ammo_box/magazine/m12g/xtr_lrg/buckshot(src) new /obj/item/ammo_box/magazine/m12g/xtr_lrg/dragon(src) /obj/item/storage/backpack/duffel/mining_conscript name = "mining conscription kit" desc = "A kit containing everything a crewmember needs to support a shaft miner in the field." /obj/item/storage/backpack/duffel/mining_conscript/populate_contents() new /obj/item/pickaxe(src) new /obj/item/clothing/glasses/meson(src) new /obj/item/t_scanner/adv_mining_scanner/lesser(src) new /obj/item/storage/bag/ore(src) new /obj/item/clothing/under/rank/cargo/miner/lavaland(src) new /obj/item/encryptionkey/headset_cargo(src) new /obj/item/clothing/mask/gas/explorer(src) new /obj/item/gun/energy/kinetic_accelerator(src) new /obj/item/kitchen/knife/combat/survival(src) new /obj/item/flashlight/seclite(src) new /obj/item/clothing/suit/hooded/explorer(src) /obj/item/storage/backpack/duffel/syndie/smg desc = "A large duffel bag, packed to the brim with C-20r magazines." /obj/item/storage/backpack/duffel/syndie/smg/populate_contents() for(var/i in 1 to 10) new /obj/item/ammo_box/magazine/smgm45(src) /obj/item/storage/backpack/duffel/syndie/c20rbundle desc = "A large duffel bag containing a C-20r, some magazines, and a cheap looking suppressor." /obj/item/storage/backpack/duffel/syndie/c20rbundle/populate_contents() new /obj/item/ammo_box/magazine/smgm45(src) new /obj/item/ammo_box/magazine/smgm45(src) new /obj/item/ammo_box/magazine/smgm45(src) new /obj/item/gun/projectile/automatic/c20r(src) new /obj/item/suppressor/specialoffer(src) /obj/item/storage/backpack/duffel/syndie/med/medicalbundle desc = "A large duffel bag containing a tactical medkit, a medical beam gun and a pair of syndicate magboots." /obj/item/storage/backpack/duffel/syndie/med/medicalbundle/populate_contents() new /obj/item/storage/firstaid/tactical(src) new /obj/item/clothing/shoes/magboots/syndie(src) new /obj/item/gun/medbeam(src) /obj/item/storage/backpack/duffel/syndie/c4/populate_contents() for(var/i in 1 to 10) new /obj/item/grenade/plastic/c4(src) /obj/item/storage/backpack/duffel/syndie/x4/populate_contents() for(var/i in 1 to 3) new /obj/item/grenade/plastic/c4/x4(src) /obj/item/storage/backpack/duffel/syndie/med/surgery name = "surgery duffelbag" desc = "A suspicious looking duffelbag for holding surgery tools." /obj/item/storage/backpack/duffel/syndie/med/surgery/populate_contents() 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/bonegel(src) new /obj/item/bonesetter(src) new /obj/item/fix_o_vein(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/reagent_containers/glass/bottle/reagent/hydrocodone(src) /// for maint spawns /obj/item/storage/backpack/duffel/syndie/med/surgery_fake name = "surgery duffelbag" desc = "A suspicious looking duffelbag for holding surgery tools." /obj/item/storage/backpack/duffel/syndie/med/surgery_fake/populate_contents() new /obj/item/scalpel(src) new /obj/item/hemostat(src) new /obj/item/retractor(src) new /obj/item/cautery(src) new /obj/item/bonegel(src) new /obj/item/bonesetter(src) new /obj/item/fix_o_vein(src) if(prob(50)) new /obj/item/circular_saw(src) new /obj/item/surgicaldrill(src) /obj/item/storage/backpack/duffel/syndie/party desc = "A large duffel bag, packed to the brim with hilarious equipment." /obj/item/storage/backpack/duffel/syndie/party/populate_contents() for(var/i in 1 to 10) new /obj/item/ammo_box/magazine/m12g/confetti(src) for(var/i in 1 to 5) new /obj/item/grenade/confetti(src) new /obj/item/gun/projectile/revolver/capgun(src) #define NANNY_MAX_VALUE 7 #define NANNY_MIN_VALUE 6 /obj/item/storage/backpack/duffel/magic_nanny_bag name = "magic nanny bag" desc = "Not to be confused with a magic granny bag. Zip it up to make it unable to be dropped while closed." icon_state = "magic_nanny_bag" worn_icon_state = "magic_nanny_bag" inhand_icon_state = "magic_nanny_bag" max_w_class = WEIGHT_CLASS_HUGE slot_flags = 0 storage_slots = 98 //Most that fits on your screen. Good luck getting that much in there. max_combined_w_class = 256 //get your 8 bit magic bags here. Also it's wizard, at some point this many items will just make it crowded. silent = TRUE zip_time = 0 resistance_flags = FIRE_PROOF open_icon_sprite = "magic_nanny_bag_open" antidrop_on_zip = TRUE /obj/item/storage/backpack/duffel/magic_nanny_bag/populate_contents(attempts = 0) var/value = 0 //Melee Weapon switch(rand(1, 8)) if(1) new /obj/item/melee/spellblade(src) value += 2 if(2) new /obj/item/organ/internal/cyberimp/arm/katana(src) value += 1 if(3) new /obj/item/mjollnir(src) value += 2 if(4) new /obj/item/singularityhammer(src) value += 2 if(5) new /obj/item/katana(src) value += 2 //force 40 this is value 2 if(6) new /obj/item/claymore(src) value += 2 //force 40 this is value 2 if(7) new /obj/item/spear/grey_tide(src) value += 2 //Value 2, clones are strong if(8) if(prob(50)) new /obj/item/sord(src) value -= 1 //Useless joke, might as well give them a value point back. else new /obj/item/bostaff(src) //Funky item, not really worth a point, but good to balance sord's free point out //Wands var/wands = 0 while(wands < 2) var/obj/item/pickedw = pick( /obj/item/gun/magic/wand/death, /obj/item/gun/magic/wand/resurrection, /obj/item/gun/magic/wand/polymorph, /obj/item/gun/magic/wand/teleport, /obj/item/gun/magic/wand/door, /obj/item/gun/magic/wand/fireball, /obj/item/gun/magic/wand/slipping) new pickedw(src) wands++ for(var/obj/item/gun/magic/wand/W in contents) //All wands in this pack come in the best possible condition W.max_charges = initial(W.max_charges) W.charges = W.max_charges //Staff var/list/list_s = list( /obj/item/gun/magic/staff/change = 2, /obj/item/gun/magic/staff/slipping = 1, /obj/item/gun/magic/staff/door = 1, /obj/item/gun/magic/staff/healing = 1, /obj/item/gun/magic/staff/chaos = 2, /obj/item/gun/magic/staff/animate = 2, /obj/item/gun/magic/staff/focus = 2, /obj/item/gun/magic/hook = 1, /obj/item/hierophant_club = 3, //Strong so super costly /obj/item/lava_staff = 2 ) //Hot seller so 2 var/obj/item/pickeds = pick(list_s) value += list_s[pickeds] new pickeds(src) //Random magical artifact. var/list/list_a = list( /obj/item/necromantic_stone = 2, /obj/item/scrying = 1, //thematic discount /obj/item/organ/internal/heart/cursed/wizard = 1, /obj/item/organ/internal/vocal_cords/colossus/wizard = 2, /obj/item/warp_cube/red = 1, /obj/item/reagent_containers/drinks/everfull = 2, /obj/item/clothing/suit/space/hardsuit/wizard = 2, /obj/item/immortality_talisman = 1, //spells recharge when invincible /obj/item/tarot_generator/wizard = 2) var/obj/item/pickeda = pick(list_a) value += list_a[pickeda] new pickeda(src) //Summon switch(rand(1, 8)) if(1) new /obj/item/antag_spawner/slaughter_demon(src) value += 2 if(2) new /obj/item/antag_spawner/morph(src) value += 1 if(3) new /obj/item/antag_spawner/slaughter_demon/laughter(src) value += 1 if(4) new /obj/item/antag_spawner/slaughter_demon/shadow(src) value += 1 if(5) new /obj/item/antag_spawner/revenant(src) value += 1 if(6) new /obj/item/contract(src) value += 2 if(7) new /obj/item/guardiancreator(src) value += 1 if(8) if(prob(25)) new /obj/item/food/grown/nymph_pod(src) new /obj/item/slimepotion/sentience(src) else new /obj/item/paicard(src) //Still useful, not a point useful. //Treat / potion. Free. var/obj/item/pickedt = pick( /obj/item/storage/box/syndidonkpockets, // Healing + speed /obj/item/reagent_containers/drinks/bottle/dragonsbreath, // Killing /obj/item/reagent_containers/drinks/bottle/immortality, // Super healing for 20 seconds /obj/item/food/meatsteak/stimulating, //Healing + stun immunity /obj/item/food/plum_pie ) // Great healing over long period of time new pickedt(src) if(value > NANNY_MAX_VALUE || value < NANNY_MIN_VALUE) if(attempts >= 5) message_admins("Failed to generate the wizard a properly priced magic nanny bag!") else new /obj/item/storage/backpack/duffel/magic_nanny_bag(get_turf(loc), attempts + 1) qdel(src) #undef NANNY_MAX_VALUE #undef NANNY_MIN_VALUE /obj/item/reagent_containers/drinks/bottle/dragonsbreath name = "flask of dragons breath" desc = "Not recommended for wizardly consumption. Recommended for mundane consumption!" icon_state = "holyflask" color = "#DC0000" list_reagents = list("dragonsbreath" = 80, "hell_water" = 20) /obj/item/reagent_containers/drinks/bottle/immortality name = "drop of immortality" desc = "Drinking this will make you immortal. For a moment or two, at least." icon_state = "holyflask" color = "#437fb8" volume = 5 list_reagents = list("adminordrazine" = 5) /obj/item/food/meatsteak/stimulating name = "stimulating steak" desc = "Stimulate your senses." list_reagents = list("nutriment" = 5, "stimulants" = 25) bitesize = 100 goal_difficulty = FOOD_GOAL_SKIP /obj/item/food/plum_pie name = "perfect plum pie" desc = "The Jack Horner brand of pie. 2 big thumbs up." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "plump_pie" filling_color = "#B8279B" bitesize = 10 list_reagents = list("nutriment" = 3, "vitamin" = 2, "syndicate_nanites" = 45) tastes = list("pie" = 1, "plum" = 1) /obj/item/storage/backpack/duffel/captain name = "captain's duffelbag" desc = "A duffelbag designed to hold large quantities of condoms." icon_state = "duffel-captain" resistance_flags = FIRE_PROOF /obj/item/storage/backpack/duffel/security name = "security duffelbag" desc = "A duffelbag built with robust fabric!" icon_state = "duffel-security" /obj/item/storage/backpack/duffel/virology name = "virology duffelbag" desc = "A white duffelbag designed to contain biohazards." icon_state = "duffel-viro" /obj/item/storage/backpack/duffel/science name = "scientist duffelbag" desc = "A duffelbag designed to hold the secrets of space." icon_state = "duffel-toxins" /obj/item/storage/backpack/duffel/genetics name = "geneticist duffelbag" desc = "A duffelbag designed to hold gibbering monkies." icon_state = "duffel-gene" /obj/item/storage/backpack/duffel/chemistry name = "chemist duffelbag" desc = "A duffelbag designed to hold corrosive substances." icon_state = "duffel-chemistry" /obj/item/storage/backpack/duffel/medical name = "medical duffelbag" desc = "A duffelbag designed to hold medicine." icon_state = "duffel-med" /obj/item/storage/backpack/duffel/engineering name = "industrial duffelbag" desc = "A duffelbag designed to hold tools." icon_state = "duffel-eng" resistance_flags = FIRE_PROOF /obj/item/storage/backpack/duffel/atmos name = "atmospherics duffelbag" desc = "A duffelbag designed to hold tools. This one is specially designed for atmospherics." icon_state = "duffel-atmos" resistance_flags = FIRE_PROOF /obj/item/storage/backpack/duffel/hydro name = "hydroponics duffelbag" desc = "A duffelbag designed to hold seeds and fauna." icon_state = "duffel-hydro" /obj/item/storage/backpack/duffel/clown name = "smiles von wiggleton" desc = "A duffelbag designed to hold bananas and bike horns." icon_state = "duffel-clown" /obj/item/storage/backpack/duffel/blueshield name = "blueshield duffelbag" desc = "A robust duffelbag issued to Nanotrasen's finest." icon_state = "duffel-blueshield" /obj/item/storage/backpack/duffel/robotics name = "roboticist duffelbag" desc = "A duffelbag designed to hold tools." icon_state = "duffel-robo" inhand_icon_state = "duffel" //ERT backpacks. /obj/item/storage/backpack/ert name = "emergency response team backpack" desc = "A spacious backpack with lots of pockets, used by members of the Nanotrasen Emergency Response Team." icon_state = "ert_commander" inhand_icon_state = "backpack" max_combined_w_class = 30 resistance_flags = FIRE_PROOF //Commander /obj/item/storage/backpack/ert/commander name = "emergency response team commander backpack" desc = "A spacious blue-striped combat backpack with plenty of easily-accessible pockets." //Security /obj/item/storage/backpack/ert/security name = "emergency response team security backpack" desc = "A spacious red-striped combat backpack with plenty of easily-accessible pockets." icon_state = "ert_security" //Engineering /obj/item/storage/backpack/ert/engineer name = "emergency response team engineer backpack" desc = "A spacious orange-striped combat backpack with plenty of easily-accessible pockets." icon_state = "ert_engineering" //Medical /obj/item/storage/backpack/ert/medical name = "emergency response team medical backpack" desc = "A spacious white-striped combat backpack with plenty of easily-accessible pockets." icon_state = "ert_medical" //Janitorial /obj/item/storage/backpack/ert/janitor name = "emergency response team janitor backpack" desc = "A spacious purple-striped combat backpack with plenty of easily-accessible pockets." icon_state = "ert_janitor" //Solgov /obj/item/storage/backpack/ert/solgov name = "\improper TSF marine rucksack" desc = "A spacious rucksack covered in pouches and pockets, worn by marines of the Trans-Solar Federation." icon_state = "ert_solgov" /obj/item/storage/backpack/ert/deathsquad name = "Deathsquad backpack" desc = "A spacious red & black combat rucksack made of lightweight nanomesh. Likely the most intimidating backpack one will ever see." icon_state = "ert_security" inhand_icon_state = null