diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index c996a6bfe89..ebd3e3f3f4d 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -271,7 +271,7 @@ var/list/uplink_items = list() /datum/uplink_item/ammo/ammobag name = "Ammo Duffelbag - Shotgun Ammo Grab Bag" desc = "A duffelbag filled with Bulldog ammo to kit out an entire team, at a discounted price." - item = /obj/item/weapon/storage/backpack/dufflebag/syndieammo/loaded + item = /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/loaded cost = 10 //bulk buyer's discount. Very useful if you're buying a mech and dont have TC left to buy people non-shotgun guns gamemodes = list(/datum/game_mode/nuclear) @@ -511,7 +511,7 @@ var/list/uplink_items = list() /datum/uplink_item/device_tools/surgerybag name = "Syndicate Surgery Dufflebag" desc = "The Syndicate surgery dufflebag is a toolkit containing all surgery tools, surgical drapes, a Syndicate brand MMI, a straitjacket, and a muzzle." - item = /obj/item/weapon/storage/backpack/dufflebag/syndiesurgery + item = /obj/item/weapon/storage/backpack/dufflebag/syndie/surgery cost = 4 /datum/uplink_item/device_tools/medkit @@ -669,6 +669,12 @@ var/list/uplink_items = list() item = /obj/item/weapon/storage/box/syndie_kit/imp_adrenal cost = 8 +/datum/uplink_item/implants/storage + name = "Storage Implant" + desc = "An implant injected into the body and later used to store up to two big items in a subspace pocket." + item = /obj/item/weapon/storage/box/syndie_kit/imp_storage + cost = 8 + /datum/uplink_item/implants/microbomb name = "Microbomb Implant" desc = "An implant injected into the body, and later activated either manually or automatically upon death. The more implants inside of you, the higher the explosive power. \ diff --git a/code/game/objects/items/weapons/implants/implant_storage.dm b/code/game/objects/items/weapons/implants/implant_storage.dm new file mode 100644 index 00000000000..e498513f7f9 --- /dev/null +++ b/code/game/objects/items/weapons/implants/implant_storage.dm @@ -0,0 +1,51 @@ +/obj/item/weapon/storage/internal/implant + name = "bluespace pocket" + max_w_class = 3 + max_combined_w_class = 6 + cant_hold = list(/obj/item/weapon/disk/nuclear) + silent = 1 + + +/obj/item/weapon/implant/storage + name = "storage implant" + desc = "Stores up to two big items in a bluespace pocket." + icon_state = "storage" + origin_tech = "materials=2;magnets=4;bluespace=4;syndicate=4" + item_color = "r" + var/obj/item/weapon/storage/internal/implant/storage + +/obj/item/weapon/implant/storage/New() + ..() + storage = new /obj/item/weapon/storage/internal/implant(src) + +/obj/item/weapon/implant/storage/activate() + storage.MouseDrop(imp_in) + +/obj/item/weapon/implant/storage/removed(source) + if(..()) + storage.close_all() + for(var/obj/item/I in storage) + storage.remove_from_storage(I, get_turf(source)) + return 1 + +/obj/item/weapon/implant/storage/implant(mob/source) + var/obj/item/weapon/implant/storage/imp_e = locate(src.type) in source + if(imp_e) + imp_e.storage.storage_slots += storage.storage_slots + imp_e.storage.max_combined_w_class += storage.max_combined_w_class + imp_e.storage.contents += storage.contents + + storage.close_all() + storage.show_to(source) + + qdel(src) + return 1 + + return ..() + +/obj/item/weapon/implanter/storage + name = "implanter (storage)" + +/obj/item/weapon/implanter/storage/New() + imp = new /obj/item/weapon/implant/storage(src) + ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 84b158e9e4b..1cabd4c4302 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -299,24 +299,31 @@ slowdown = 1 max_combined_w_class = 27 -/obj/item/weapon/storage/backpack/dufflebag/syndiemed +/obj/item/weapon/storage/backpack/dufflebag/syndie + name = "suspicious looking dufflebag" + desc = "A large dufflebag for holding extra tactical supplies." + icon_state = "duffle-syndie" + item_state = "duffle-syndiemed" + origin_tech = "syndicate=1" + silent = 1 + slowdown = 0 + +/obj/item/weapon/storage/backpack/dufflebag/syndie/med name = "medical dufflebag" desc = "A large dufflebag for holding extra tactical medical supplies." icon_state = "duffle-syndiemed" item_state = "duffle-syndiemed" - slowdown = 0 -/obj/item/weapon/storage/backpack/dufflebag/syndieammo +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo name = "ammunition dufflebag" desc = "A large dufflebag for holding extra weapons ammunition and supplies." icon_state = "duffle-syndieammo" item_state = "duffle-syndieammo" - slowdown = 0 -/obj/item/weapon/storage/backpack/dufflebag/syndieammo/loaded +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/loaded desc = "A large dufflebag, packed to the brim with Bulldog shotgun ammo." -/obj/item/weapon/storage/backpack/dufflebag/syndieammo/loaded/New() +/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo/loaded/New() ..() contents = list() new /obj/item/ammo_box/magazine/m12g(src) @@ -330,14 +337,14 @@ new /obj/item/ammo_box/magazine/m12g/dragon(src) return -/obj/item/weapon/storage/backpack/dufflebag/syndiesurgery - name = "Syndicate surgery dufflebag" - desc = "A menacingly looking dufflebag for holding surgery tools." +/obj/item/weapon/storage/backpack/dufflebag/syndie/surgery + name = "surgery dufflebag" + desc = "A suspicious looking dufflebag for holding surgery tools." icon_state = "duffle-syndiemed" item_state = "duffle-syndiemed" storage_slots = 10 -/obj/item/weapon/storage/backpack/dufflebag/syndiesurgery/New() +/obj/item/weapon/storage/backpack/dufflebag/syndie/surgery/New() ..() contents = list() new /obj/item/weapon/scalpel(src) diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm new file mode 100644 index 00000000000..ae927ca5808 --- /dev/null +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -0,0 +1,42 @@ +/obj/item/weapon/storage/internal + storage_slots = 2 + max_w_class = 2 + max_combined_w_class = 4 + w_class = 4 + var/priority = 1 + +/*obj/item/weapon/storage/internal/pocket/New() + ..() + if(loc) name = loc.name + +/obj/item/weapon/storage/internal/pocket/big + max_w_class = 3 + max_combined_w_class = 6 + +/obj/item/weapon/storage/internal/pocket/small + storage_slots = 1 + max_combined_w_class = 2 + priority = 0 + +/obj/item/weapon/storage/internal/pocket/tiny + storage_slots = 1 + max_w_class = 1 + max_combined_w_class = 1 + priority = 0 + + +/obj/item/weapon/storage/internal/pocket/small/detective + priority = 1 + +/obj/item/weapon/storage/internal/pocket/small/detective/New() + ..() + new /obj/item/weapon/reagent_containers/food/drinks/flask/det(src) + + +proc/isstorage(var/atom/A) + if(istype(A, /obj/item/weapon/storage)) + return 1 + + if(istype(A, /obj/item/clothing)) + var/obj/item/clothing/C = A + if(C.pockets) return 1*/ \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index b00ffd68c61..06d78149919 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -9,6 +9,7 @@ name = "storage" icon = 'icons/obj/storage.dmi' w_class = 3.0 + var/silent = 0 // No message on putting items in var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else) var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set) var/list/is_seeing = new/list() //List of mobs which are currently seeing the contents of this item's storage @@ -292,6 +293,8 @@ if(usr) if(!usr.unEquip(W)) return 0 + if(silent) + prevent_warning = 1 W.loc = src W.on_enter_storage(src) if(usr) diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 703a17807d5..4d3e413f51d 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -71,6 +71,7 @@ icon_state = "syndicate" item_state = "toolbox_syndi" origin_tech = "combat=1;syndicate=1" + silent = 1 force = 15 throwforce = 18 @@ -82,7 +83,7 @@ new /obj/item/weapon/crowbar/red(src) new /obj/item/weapon/wirecutters(src, "red") new /obj/item/device/multitool(src) - new /obj/item/clothing/gloves/color/red/insulated(src) + new /obj/item/clothing/gloves/combat(src) /obj/item/weapon/storage/toolbox/drone name = "mechanical toolbox" diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index becd01a5308..84a6af7a6c4 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -58,6 +58,7 @@ new /obj/item/weapon/implanter/emp(src) new /obj/item/weapon/implanter/adrenalin(src) new /obj/item/weapon/implanter/explosive(src) + new /obj/item/weapon/implanter/storage(src) return if("hacker") @@ -148,6 +149,15 @@ return +/obj/item/weapon/storage/box/syndie_kit/imp_storage + name = "boxed storage implant (with injector)" + +/obj/item/weapon/storage/box/syndie_kit/imp_storage/New() + ..() + new /obj/item/weapon/implanter/storage(src) + return + + /obj/item/weapon/storage/box/syndie_kit/space name = "boxed space suit and helmet" can_hold = list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate) diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index b6ad237fbba..a44de8f144d 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -30,7 +30,7 @@ new /obj/item/ammo_box/magazine/m10mm(src) new /obj/item/weapon/storage/box/flashbangs(src) new /obj/item/weapon/storage/box/teargas(src) - new /obj/item/weapon/storage/backpack/dufflebag/syndiemed(src) + new /obj/item/weapon/storage/backpack/dufflebag/syndie/med(src) new /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog(src) new /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog(src) new /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog(src) diff --git a/html/changelogs/c0-hammerspace-implant.yml b/html/changelogs/c0-hammerspace-implant.yml new file mode 100644 index 00000000000..1c265603174 --- /dev/null +++ b/html/changelogs/c0-hammerspace-implant.yml @@ -0,0 +1,36 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# spellcheck (typo fixes) +# experiment +# tgs (TG-ported fixes?) +################################# + +# Your name. +author: CoreOverload + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Added a new 8TC traitor item: subspace storage implant. It allows you to store two box-sized items in (almost) undetectable storage. " \ No newline at end of file diff --git a/icons/obj/implants.dmi b/icons/obj/implants.dmi index ed530528cc3..8dc2f08fdcb 100644 Binary files a/icons/obj/implants.dmi and b/icons/obj/implants.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index ce46721a855..92283417a29 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 75cb814a0aa..8a694fdef77 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -679,6 +679,7 @@ #include "code\game\objects\items\weapons\implants\implant_explosive.dm" #include "code\game\objects\items\weapons\implants\implant_freedom.dm" #include "code\game\objects\items\weapons\implants\implant_loyality.dm" +#include "code\game\objects\items\weapons\implants\implant_storage.dm" #include "code\game\objects\items\weapons\implants\implantcase.dm" #include "code\game\objects\items\weapons\implants\implantchair.dm" #include "code\game\objects\items\weapons\implants\implanter.dm" @@ -694,6 +695,7 @@ #include "code\game\objects\items\weapons\storage\briefcase.dm" #include "code\game\objects\items\weapons\storage\fancy.dm" #include "code\game\objects\items\weapons\storage\firstaid.dm" +#include "code\game\objects\items\weapons\storage\internal.dm" #include "code\game\objects\items\weapons\storage\lockbox.dm" #include "code\game\objects\items\weapons\storage\secure.dm" #include "code\game\objects\items\weapons\storage\storage.dm"