mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-01-08 00:21:43 +00:00
* starts it * Update magic_tarot.dm * MORE PROGRESS * So many thanks to Cloudbucket, for sprites * The Work, the Art, continues. * more changes * pushes the Work foward. All cards done. * and more thanks github * adds to BSH * tochat * Finishes QWERTYTODO. Magic key. World smoke * Isaac and his mother lived alone in a small house on a hill. Isaac kept to himself, drawing pictures and playing with his toys as his mom watched Christian broadcasts on the television. Life was simple, and they were both happy. That was, until the day Isaac’s mom heard a voice from above. “Your son has become corrupted by sin. He needs to be saved.” “I will do my best to save him, my Lord,” Isaac’s mother replied, rushing into Isaac’s room, removing all that was evil from his life. Again the voice called to her, "Isaac’s soul is still corrupt. He needs to be cut off from all that is evil in this world and confess his sins." “I will follow your instructions, Lord. I have faith in thee,” Isaac’s mother replied, as she locked Isaac in his room, away from the evils of the world. One last time, Isaac’s mom heard the voice of God calling to her. “You've done as I've asked, but I still question your devotion to me. To prove your faith, I will ask one more thing of you." "Yes Lord, anything!” Isaac’s mother begged. "To prove your love and devotion, I require a sacrifice. Your son, Isaac, will be this sacrifice. Go into his room and end his life, as an offering to me to prove you love me above all else." "Yes Lord", she replied, grabbing a butcher’s knife from the kitchen. Isaac, watching through a crack in his door, trembled in fear. Scrambling around his room to find a hiding place, he noticed a trap door to the basement hidden under his rug. Without hesitation, he flung open the hatch, just as his mother burst through his door, and threw himself down into the unknown depths below. * nanny bag it before I forget * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * returns early * Apply suggestions from code review Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> * RE-RE-RE-REVIEW * Apply suggestions from code review Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: synthtee <127706731+SynthTwo@users.noreply.github.com> * requested changes and such * duh * Apply suggestions from code review Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * returns early * Update code/datums/status_effects/buffs.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * new hrefs here to troll CI :trollface: * Update code/game/gamemodes/wizard/magic_tarot.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> --------- Signed-off-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: synthtee <127706731+SynthTwo@users.noreply.github.com>
941 lines
32 KiB
Plaintext
941 lines
32 KiB
Plaintext
|
|
/*
|
|
* 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/clothing_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/clothing_righthand.dmi'
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
slot_flags = SLOT_FLAG_BACK //ERROOOOO
|
|
max_w_class = WEIGHT_CLASS_NORMAL
|
|
max_combined_w_class = 21
|
|
storage_slots = 21
|
|
resistance_flags = NONE
|
|
max_integrity = 300
|
|
sprite_sheets = list(
|
|
"Vox" = 'icons/mob/clothing/species/vox/back.dmi',
|
|
"Grey" = 'icons/mob/clothing/species/grey/back.dmi'
|
|
)
|
|
|
|
/obj/item/storage/backpack/attackby(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 class='notice'> [src] is empty.</span>"
|
|
else if(space_used <= max_combined_w_class * 0.6)
|
|
. += "<span class='notice'> [src] still has plenty of remaining space.</span>"
|
|
else if(space_used <= max_combined_w_class * 0.8)
|
|
. += "<span class='notice'> [src] is beginning to run out of space.</span>"
|
|
else if(space_used < max_combined_w_class)
|
|
. += "<span class='notice'> [src] doesn't have much space left.</span>"
|
|
else
|
|
. += "<span class='notice'> [src] is full.</span>"
|
|
|
|
/*
|
|
* Backpack Types
|
|
*/
|
|
|
|
/obj/item/storage/backpack/holding
|
|
name = "Bag of Holding"
|
|
desc = "A backpack that opens into a localized pocket of Bluespace."
|
|
origin_tech = "bluespace=5;materials=4;engineering=4;plasmatech=5"
|
|
icon_state = "holdingpack"
|
|
item_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(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 class='warning'>[user] grins as [user.p_they()] begin[user.p_s()] to put a Bag of Holding into a Bag of Holding!</span>", "<span class='warning'>You begin to put the Bag of Holding into the Bag of Holding!</span>")
|
|
if(do_after(user, 30, target=src))
|
|
investigate_log("has become a singularity. Caused by [user.key]","singulo")
|
|
user.visible_message("<span class='warning'>[user] erupts in evil laughter as [user.p_they()] put[user.p_s()] the Bag of Holding into another Bag of Holding!</span>", "<span class='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>","<span class='warning'> You hear the sound of scientific evil brewing!</span>")
|
|
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 <A href='byond://?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
|
|
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))
|
|
|
|
/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"
|
|
item_state = "giftbag0"
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
max_w_class = WEIGHT_CLASS_NORMAL
|
|
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"
|
|
item_state = "cultpack"
|
|
|
|
/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/clown/syndie
|
|
|
|
/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(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/snacks/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"
|
|
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"
|
|
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"
|
|
item_state = "engiepack"
|
|
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"
|
|
item_state = "atmospack"
|
|
resistance_flags = FIRE_PROOF
|
|
|
|
/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/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"
|
|
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"
|
|
item_state = "viropack"
|
|
|
|
/obj/item/storage/backpack/blueshield
|
|
name = "blueshield backpack"
|
|
desc = "A robust backpack issued to Nanotrasen's finest."
|
|
icon_state = "blueshieldpack"
|
|
item_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"
|
|
item_state = "robopack"
|
|
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"
|
|
item_state = "satchel"
|
|
resistance_flags = FIRE_PROOF
|
|
var/strap_side_straight = FALSE
|
|
|
|
/obj/item/storage/backpack/satchel/examine(mob/user)
|
|
. = ..()
|
|
. += "<span class='notice'>You can <b>Alt-Shift-Click</b> [src] to flip it's strap side.</span>"
|
|
|
|
/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
|
|
item_state = strap_side_straight ? "satchel-flipped" : "satchel"
|
|
if(ishuman(loc))
|
|
var/mob/living/carbon/human/H = loc
|
|
H.update_inv_back()
|
|
|
|
/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"
|
|
item_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"
|
|
item_state = null
|
|
|
|
/obj/item/storage/backpack/satchel/withwallet/populate_contents()
|
|
new /obj/item/storage/wallet/random(src)
|
|
|
|
/obj/item/storage/backpack/satchel_norm
|
|
name = "satchel"
|
|
desc = "A deluxe NT Satchel, made of the highest quality leather."
|
|
icon_state = "satchel-norm"
|
|
item_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"
|
|
item_state = "satchel-clown"
|
|
|
|
/obj/item/storage/backpack/satchel_eng
|
|
name = "industrial satchel"
|
|
desc = "A tough satchel with extra pockets."
|
|
icon_state = "satchel-eng"
|
|
item_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"
|
|
item_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"
|
|
item_state = "satchel-explorer"
|
|
|
|
/obj/item/storage/backpack/satchel_med
|
|
name = "medical satchel"
|
|
desc = "A sterile satchel used in medical departments."
|
|
icon_state = "satchel-med"
|
|
item_state = "satchel-med"
|
|
|
|
/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"
|
|
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"
|
|
item_state = "satchel-sec"
|
|
|
|
/obj/item/storage/backpack/satchel_hyd
|
|
name = "hydroponics satchel"
|
|
desc = "A green satchel for plant related work."
|
|
icon_state = "satchel-hyd"
|
|
item_state = "satchel-hyd"
|
|
|
|
/obj/item/storage/backpack/satchel_cap
|
|
name = "captain's satchel"
|
|
desc = "An exclusive satchel for Nanotrasen officers."
|
|
icon_state = "satchel-cap"
|
|
item_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"
|
|
item_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"
|
|
item_state = "satchel-robo"
|
|
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"
|
|
item_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"
|
|
item_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
|
|
/// This variable is used to change the item state to the variable when opened
|
|
var/open_item_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 class='notice'>It is currently [zipped ? "zipped" : "unzipped"]. Alt+Shift+Click to [zipped ? "un-" : ""]zip it!</span>"
|
|
|
|
/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
|
|
|
|
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)
|
|
flags ^= NODROP
|
|
update_icon_state(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)
|
|
flags |= NODROP
|
|
update_icon_state(UPDATE_ICON_STATE)
|
|
|
|
/obj/item/storage/backpack/duffel/update_icon_state()
|
|
. = ..()
|
|
if(!zipped)
|
|
if(open_icon_sprite)
|
|
icon_state = open_icon_sprite
|
|
if(open_item_sprite)
|
|
item_state = open_item_sprite
|
|
else
|
|
if(open_icon_sprite)
|
|
icon_state = initial(icon_state)
|
|
item_state = initial(item_state)
|
|
if(ishuman(loc))
|
|
var/mob/living/carbon/human/H = loc
|
|
H.update_inv_r_hand()
|
|
H.update_inv_l_hand()
|
|
|
|
|
|
// 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 class='notice'>[src] is zipped shut!</span>")
|
|
return FALSE
|
|
|
|
return ..()
|
|
|
|
/obj/item/storage/backpack/duffel/removal_allowed_check(mob/user)
|
|
if(zipped)
|
|
to_chat(user, "<span class='notice'>[src] is zipped shut!</span>")
|
|
return FALSE
|
|
|
|
return TRUE
|
|
|
|
/obj/item/storage/backpack/duffel/drop_inventory(user)
|
|
if(zipped)
|
|
to_chat(usr, "<span class='notice'>[src] is zipped shut!</span>")
|
|
return FALSE
|
|
|
|
return ..()
|
|
|
|
/obj/item/storage/backpack/duffel/show_to(mob/user)
|
|
if(isobserver(user))
|
|
return ..()
|
|
|
|
if(zipped)
|
|
to_chat(usr, "<span class='notice'>[src] is zipped shut!</span>")
|
|
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"
|
|
item_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"
|
|
item_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/shotgunXLmags
|
|
desc = "A large duffelbag, containing three types of extended drum magazines."
|
|
|
|
/obj/item/storage/backpack/duffel/syndie/shotgunXLmags/populate_contents()
|
|
new /obj/item/ammo_box/magazine/m12g/XtrLrg(src)
|
|
new /obj/item/ammo_box/magazine/m12g/XtrLrg/buckshot(src)
|
|
new /obj/item/ammo_box/magazine/m12g/XtrLrg/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/bulldogbundle
|
|
desc = "A large duffel bag containing a Bulldog, some drums, and a pair of thermal imaging glasses."
|
|
|
|
/obj/item/storage/backpack/duffel/syndie/bulldogbundle/populate_contents()
|
|
new /obj/item/gun/projectile/automatic/shotgun/bulldog(src)
|
|
new /obj/item/ammo_box/magazine/m12g(src)
|
|
new /obj/item/ammo_box/magazine/m12g(src)
|
|
new /obj/item/clothing/glasses/chameleon/thermal(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/FixOVein(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/FixOVein(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"
|
|
item_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/snacks/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/snacks/meatsteak/stimulating, //Healing + stun immunity
|
|
/obj/item/food/snacks/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"
|
|
volume = 100
|
|
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 = "#C8A5DC"
|
|
volume = 5
|
|
list_reagents = list("adminordrazine" = 5)
|
|
|
|
/obj/item/food/snacks/meatsteak/stimulating
|
|
name = "stimulating steak"
|
|
desc = "Stimulate your senses."
|
|
list_reagents = list("nutriment" = 5, "stimulants" = 25)
|
|
bitesize = 100
|
|
|
|
/obj/item/food/snacks/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"
|
|
item_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"
|
|
item_state = "duffel-security"
|
|
|
|
/obj/item/storage/backpack/duffel/virology
|
|
name = "virology duffelbag"
|
|
desc = "A white duffelbag designed to contain biohazards."
|
|
icon_state = "duffel-viro"
|
|
item_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"
|
|
item_state = "duffel-toxins"
|
|
|
|
/obj/item/storage/backpack/duffel/genetics
|
|
name = "geneticist duffelbag"
|
|
desc = "A duffelbag designed to hold gibbering monkies."
|
|
icon_state = "duffel-gene"
|
|
item_state = "duffel-gene"
|
|
|
|
/obj/item/storage/backpack/duffel/chemistry
|
|
name = "chemist duffelbag"
|
|
desc = "A duffelbag designed to hold corrosive substances."
|
|
icon_state = "duffel-chemistry"
|
|
item_state = "duffel-chemistry"
|
|
|
|
/obj/item/storage/backpack/duffel/medical
|
|
name = "medical duffelbag"
|
|
desc = "A duffelbag designed to hold medicine."
|
|
icon_state = "duffel-med"
|
|
item_state = "duffel-med"
|
|
|
|
/obj/item/storage/backpack/duffel/engineering
|
|
name = "industrial duffelbag"
|
|
desc = "A duffelbag designed to hold tools."
|
|
icon_state = "duffel-eng"
|
|
item_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"
|
|
item_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"
|
|
item_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"
|
|
item_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"
|
|
item_state = "duffel-blueshield"
|
|
|
|
/obj/item/storage/backpack/duffel/robotics
|
|
name = "roboticist duffelbag"
|
|
desc = "A duffelbag designed to hold tools."
|
|
icon_state = "duffel-robo"
|
|
item_state = "duffel-robo"
|
|
|
|
//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"
|
|
item_state = null
|
|
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 backpack with lots of pockets, worn by the commander of a Nanotrasen Emergency Response Team."
|
|
|
|
//Security
|
|
/obj/item/storage/backpack/ert/security
|
|
name = "emergency response team security backpack"
|
|
desc = "A spacious backpack with lots of pockets, worn by security members of a Nanotrasen Emergency Response Team."
|
|
icon_state = "ert_security"
|
|
|
|
//Engineering
|
|
/obj/item/storage/backpack/ert/engineer
|
|
name = "emergency response team engineer backpack"
|
|
desc = "A spacious backpack with lots of pockets, worn by engineering members of a Nanotrasen Emergency Response Team."
|
|
icon_state = "ert_engineering"
|
|
|
|
//Medical
|
|
/obj/item/storage/backpack/ert/medical
|
|
name = "emergency response team medical backpack"
|
|
desc = "A spacious backpack with lots of pockets, worn by medical members of a Nanotrasen Emergency Response Team."
|
|
icon_state = "ert_medical"
|
|
|
|
//Janitorial
|
|
/obj/item/storage/backpack/ert/janitor
|
|
name = "emergency response team janitor backpack"
|
|
desc = "A spacious backpack with lots of pockets, worn by janitorial members of a Nanotrasen Emergency Response Team."
|
|
icon_state = "ert_janitor"
|
|
|
|
//Solgov
|
|
/obj/item/storage/backpack/ert/solgov
|
|
name = "\improper TSF marine backpack"
|
|
desc = "A spacious backpack with lots of 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 backpack with lots of pockets, worn by those working in Special Operations."
|
|
icon_state = "ert_security"
|
|
|