diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index 600ed118dc..1a8b10a26a 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -141,11 +141,12 @@
store_items = 0
var/used = 0
var/obj/item/weapon/tank/tank = null
+ var/tank_type = /obj/item/weapon/tank/stasis/oxygen
var/stasis_level = 3 //Every 'this' life ticks are applied to the mob (when life_ticks%stasis_level == 1)
var/obj/item/weapon/reagent_containers/syringe/syringe
/obj/structure/closet/body_bag/cryobag/Initialize()
- tank = new /obj/item/weapon/tank/stasis/oxygen(null) //It's in nullspace to prevent ejection when the bag is opened.
+ tank = new tank_type(null) //It's in nullspace to prevent ejection when the bag is opened.
..()
/obj/structure/closet/body_bag/cryobag/Destroy()
@@ -157,7 +158,7 @@
. = ..()
if(used)
var/obj/item/O = new/obj/item(src.loc)
- O.name = "used stasis bag"
+ O.name = "used [name]"
O.icon = src.icon
O.icon_state = "bodybag_used"
O.desc = "Pretty useless now..."
diff --git a/code/game/objects/items/robobag.dm b/code/game/objects/items/robobag.dm
new file mode 100644
index 0000000000..f367f6a145
--- /dev/null
+++ b/code/game/objects/items/robobag.dm
@@ -0,0 +1,134 @@
+
+/obj/item/bodybag/cryobag/robobag
+ name = "synthmorph bag"
+ desc = "A reusable polymer bag designed to slow down synthetic functions such as data corruption and coolant flow, \
+ especially useful if short on time or in a hostile enviroment."
+ icon = 'icons/obj/robobag.dmi'
+ icon_state = "bodybag_folded"
+ item_state = "bodybag_cryo_folded"
+ origin_tech = list(TECH_ENGINEERING = 3)
+
+/obj/item/bodybag/cryobag/robobag/attack_self(mob/user)
+ var/obj/structure/closet/body_bag/cryobag/robobag/R = new /obj/structure/closet/body_bag/cryobag/robobag(user.loc)
+ R.add_fingerprint(user)
+ if(syringe)
+ R.syringe = syringe
+ syringe = null
+ qdel(src)
+
+/obj/structure/closet/body_bag/cryobag/robobag
+ name = "synthmorph bag"
+ desc = "A reusable polymer bag designed to slow down synthetic functions such as data corruption and coolant flow, \
+ especially useful if short on time or in a hostile enviroment."
+ icon = 'icons/obj/robobag.dmi'
+ item_path = /obj/item/bodybag/cryobag/robobag
+ tank_type = /obj/item/weapon/tank/stasis/nitro_cryo
+ stasis_level = 2 // Lower than the normal cryobag, because it's not made for meat that dies. It's made for robots and is freezing.
+ var/obj/item/clothing/accessory/badge/corptag // The tag on the bag.
+
+/obj/structure/closet/body_bag/cryobag/robobag/examine(mob/user)
+ ..()
+ if(Adjacent(user) && corptag)
+ to_chat(user, "\The [src] has a [corptag] attached to it.")
+
+/obj/structure/closet/body_bag/cryobag/robobag/update_icon()
+ overlays.Cut()
+ ..()
+ if(corptag)
+ var/corptag_icon_state = "tag_blank"
+ if(istype(corptag,/obj/item/clothing/accessory/badge/holo/detective) || istype(corptag,/obj/item/clothing/accessory/badge/holo/detective) || istype(corptag, /obj/item/clothing/accessory/badge/holo/hos) || istype(corptag, /obj/item/clothing/accessory/badge/old) || istype(corptag, /obj/item/clothing/accessory/badge/sheriff))
+ corptag_icon_state = "tag_badge_gold"
+ else if(istype(corptag, /obj/item/clothing/accessory/badge/holo/warden))
+ corptag_icon_state = "tag_badge_silver"
+ else if(istype(corptag, /obj/item/clothing/accessory/badge/holo))
+ corptag_icon_state = "tag_badge_blue"
+ else if(istype(corptag, /obj/item/clothing/accessory/badge/corporate_tag))
+ corptag_icon_state = corptag.icon_state
+
+ var/image/I = image(icon, corptag_icon_state)
+ overlays += I
+
+/obj/structure/closet/body_bag/cryobag/robobag/AltClick(mob/user)
+ if(!Adjacent(user))
+ ..()
+ if(corptag)
+ corptag.forceMove(get_turf(user))
+ to_chat(user, "You remove \the [corptag] from \the [src].")
+ corptag = null
+ update_icon()
+ return
+ return ..()
+
+/obj/structure/closet/body_bag/cryobag/robobag/Destroy()
+ if(corptag && get_turf(src))
+ var/turf/T = get_turf(src)
+ corptag.forceMove(T)
+ corptag = null
+ else
+ QDEL_NULL(corptag)
+ return ..()
+
+/obj/structure/closet/body_bag/cryobag/robobag/Entered(atom/movable/AM)
+ ..()
+ if(ishuman(AM))
+ var/mob/living/carbon/human/H = AM
+ if(H.isSynthetic())
+ if(H.getToxLoss() == 0) // We don't exactly care about the bag being 'used' when containing a synth, unless it's got work.
+ used = FALSE
+ else
+ H.add_modifier(/datum/modifier/fbp_debug/robobag)
+
+/obj/structure/closet/body_bag/cryobag/robobag/attackby(obj/item/W, mob/user)
+ if(opened)
+ ..()
+ else //Allows the bag to respond to a cyborg analyzer and tag.
+ if(istype(W,/obj/item/device/robotanalyzer))
+ var/obj/item/device/robotanalyzer/analyzer = W
+ for(var/mob/living/L in contents)
+ analyzer.attack(L,user)
+
+ else if(istype(W, /obj/item/clothing/accessory/badge))
+ if(corptag)
+ var/old_tag = corptag
+ corptag.forceMove(get_turf(src))
+ corptag = W
+ user.unEquip(corptag)
+ corptag.loc = null
+ to_chat(user, "You swap \the [old_tag] for \the [corptag].")
+ else
+ corptag = W
+ user.unEquip(corptag)
+ corptag.loc = null
+ to_chat(user, "You attach \the [corptag] to \the [src].")
+ update_icon()
+
+ else
+ ..()
+
+/datum/modifier/fbp_debug
+ name = "defragmenting"
+ desc = "Your software is being debugged."
+ mob_overlay_state = "signal_blue"
+
+ on_created_text = "You feel something pour over your senses."
+ on_expired_text = "Your mind is clear once more."
+ stacks = MODIFIER_STACK_FORBID
+
+/datum/modifier/fbp_debug/tick()
+ if(holder.getToxLoss())
+ holder.adjustToxLoss(rand(-1,-5))
+
+/datum/modifier/fbp_debug/can_apply(mob/living/L)
+ if(!L.isSynthetic())
+ return FALSE
+ return TRUE
+
+/datum/modifier/fbp_debug/check_if_valid()
+ ..()
+ if(!holder.getToxLoss())
+ src.expire()
+
+/datum/modifier/fbp_debug/robobag/check_if_valid()
+ ..()
+ if(!istype(holder.loc, /obj/structure/closet/body_bag/cryobag/robobag))
+ src.expire()
diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm
index 6308759044..9e984ba05f 100644
--- a/code/game/objects/items/weapons/tanks/tank_types.dm
+++ b/code/game/objects/items/weapons/tanks/tank_types.dm
@@ -218,3 +218,15 @@
if(..(user, 0) && air_contents.gas["nitrogen"] < 10)
to_chat(user, text("The meter on \the [src] indicates you are almost out of nitrogen!"))
//playsound(user, 'sound/effects/alert.ogg', 50, 1)
+
+/obj/item/weapon/tank/stasis/nitro_cryo // Synthmorph bags need to have initial pressure within safe bounds for human atmospheric pressure, but low temperature to stop unwanted degredation.
+ name = "stasis cryogenic nitrogen tank"
+ desc = "Cryogenic Nitrogen tank included in most synthmorph bag designs."
+ icon_state = "emergency_double_nitro"
+ gauge_icon = "indicator_emergency_double"
+ volume = 10
+
+/obj/item/weapon/tank/stasis/nitro_cryo/Initialize()
+ ..()
+ src.air_contents.adjust_gas_temp("nitrogen", (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*TN60C), TN60C)
+ return
diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm
index ded92c2b3a..8e114c6984 100644
--- a/code/modules/clothing/under/accessories/badges.dm
+++ b/code/modules/clothing/under/accessories/badges.dm
@@ -148,3 +148,66 @@
new /obj/item/clothing/accessory/badge/holo/cord(src)
..()
return
+
+// Synthmorph bag / Corporation badges. Primarily used on the robobag, but can be worn. Default is NT.
+
+/obj/item/clothing/accessory/badge/corporate_tag
+ name = "NanoTrasen Badge"
+ desc = "A plain metallic plate that might denote the wearer as a member of NanoTrasen."
+ icon_state = "tag_nt"
+ item_state = "badge"
+ badge_string = "NanoTrasen"
+
+/obj/item/clothing/accessory/badge/corporate_tag/morpheus
+ name = "Morpheus Badge"
+ desc = "A plain metallic plate that might denote the wearer as a member of Morpheus Cyberkinetics."
+ icon_state = "tag_blank"
+ badge_string = "Morpheus"
+
+/obj/item/clothing/accessory/badge/corporate_tag/wardtaka
+ name = "Ward-Takahashi Badge"
+ desc = "A plain metallic plate that might denote the wearer as a member of Ward-Takahashi."
+ icon_state = "tag_ward"
+ badge_string = "Ward-Takahashi"
+
+/obj/item/clothing/accessory/badge/corporate_tag/zenghu
+ name = "Zeng-Hu Badge"
+ desc = "A plain metallic plate that might denote the wearer as a member of Zeng-Hu."
+ icon_state = "tag_zeng"
+ badge_string = "Zeng-Hu"
+
+/obj/item/clothing/accessory/badge/corporate_tag/gilthari
+ name = "Gilthari Badge"
+ desc = "An opulent metallic plate that might denote the wearer as a member of Gilthari."
+ icon_state = "tag_gil"
+ badge_string = "Gilthari"
+
+/obj/item/clothing/accessory/badge/corporate_tag/veymed
+ name = "Vey-Medical Badge"
+ desc = "A plain metallic plate that might denote the wearer as a member of Vey-Medical."
+ icon_state = "tag_vey"
+ badge_string = "Vey-Medical"
+
+/obj/item/clothing/accessory/badge/corporate_tag/hephaestus
+ name = "Hephaestus Badge"
+ desc = "A rugged metallic plate that might denote the wearer as a member of Hephaestus."
+ icon_state = "tag_heph"
+ badge_string = "Hephaestus"
+
+/obj/item/clothing/accessory/badge/corporate_tag/grayson
+ name = "Grayson Badge"
+ desc = "A rugged metallic plate that might denote the wearer as a member of Grayson."
+ icon_state = "tag_grayson"
+ badge_string = "Grayson"
+
+/obj/item/clothing/accessory/badge/corporate_tag/xion
+ name = "Xion Badge"
+ desc = "A rugged metallic plate that might denote the wearer as a member of Xion."
+ icon_state = "tag_xion"
+ badge_string = "Xion"
+
+/obj/item/clothing/accessory/badge/corporate_tag/bishop
+ name = "Bishop Badge"
+ desc = "A sleek metallic plate that might denote the wearer as a member of Bishop."
+ icon_state = "tag_bishop"
+ badge_string = "Bishop"
diff --git a/code/modules/research/prosfab_designs.dm b/code/modules/research/prosfab_designs.dm
index af1efba746..43399ce322 100644
--- a/code/modules/research/prosfab_designs.dm
+++ b/code/modules/research/prosfab_designs.dm
@@ -357,4 +357,85 @@
id = "borg_language_module"
req_tech = list(TECH_DATA = 6, TECH_MATERIAL = 6)
materials = list(DEFAULT_WALL_MATERIAL = 25000, "glass" = 3000, "gold" = 350)
- build_path = /obj/item/borg/upgrade/language
\ No newline at end of file
+ build_path = /obj/item/borg/upgrade/language
+
+// Synthmorph Bags.
+
+/datum/design/item/prosfab/synthmorphbag
+ name = "Synthmorph Storage Bag"
+ desc = "Used to store or slowly defragment an FBP."
+ id = "misc_synth_bag"
+ materials = list(DEFAULT_WALL_MATERIAL = 250, "glass" = 250, "plastic" = 2000)
+ build_path = /obj/item/bodybag/cryobag/robobag
+
+/datum/design/item/prosfab/badge_nt
+ name = "NanoTrasen Tag"
+ desc = "Used to identify an empty NanoTrasen FBP."
+ id = "misc_synth_bag_tag_nt"
+ materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "plastic" = 1000)
+ build_path = /obj/item/clothing/accessory/badge/corporate_tag
+
+/datum/design/item/prosfab/badge_morph
+ name = "Morpheus Tag"
+ desc = "Used to identify an empty Morpheus FBP."
+ id = "misc_synth_bag_tag_morph"
+ materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "plastic" = 1000)
+ build_path = /obj/item/clothing/accessory/badge/corporate_tag/morpheus
+
+/datum/design/item/prosfab/badge_wardtaka
+ name = "Ward-Takahashi Tag"
+ desc = "Used to identify an empty Ward-Takahashi FBP."
+ id = "misc_synth_bag_tag_wardtaka"
+ materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "plastic" = 1000)
+ build_path = /obj/item/clothing/accessory/badge/corporate_tag/wardtaka
+
+/datum/design/item/prosfab/badge_zenghu
+ name = "Zeng-Hu Tag"
+ desc = "Used to identify an empty Zeng-Hu FBP."
+ id = "misc_synth_bag_tag_zenghu"
+ materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "plastic" = 1000)
+ build_path = /obj/item/clothing/accessory/badge/corporate_tag/zenghu
+
+/datum/design/item/prosfab/badge_gilthari
+ name = "Gilthari Tag"
+ desc = "Used to identify an empty Gilthari FBP."
+ id = "misc_synth_bag_tag_gilthari"
+ materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "gold" = 1000)
+ build_path = /obj/item/clothing/accessory/badge/corporate_tag/gilthari
+ req_tech = list(TECH_MATERIAL = 4, TECH_ILLEGAL = 2, TECH_PHORON = 2)
+
+/datum/design/item/prosfab/badge_veymed
+ name = "Vey-Medical Tag"
+ desc = "Used to identify an empty Vey-Medical FBP."
+ id = "misc_synth_bag_tag_veymed"
+ materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "plastic" = 1000)
+ build_path = /obj/item/clothing/accessory/badge/corporate_tag/veymed
+ req_tech = list(TECH_MATERIAL = 3, TECH_ILLEGAL = 1, TECH_BIO = 4)
+
+/datum/design/item/prosfab/badge_hephaestus
+ name = "Hephaestus Tag"
+ desc = "Used to identify an empty Hephaestus FBP."
+ id = "misc_synth_bag_tag_heph"
+ materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "plastic" = 1000)
+ build_path = /obj/item/clothing/accessory/badge/corporate_tag/hephaestus
+
+/datum/design/item/prosfab/badge_grayson
+ name = "Grayson Tag"
+ desc = "Used to identify an empty Grayson FBP."
+ id = "misc_synth_bag_tag_grayson"
+ materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "plastic" = 1000)
+ build_path = /obj/item/clothing/accessory/badge/corporate_tag/grayson
+
+/datum/design/item/prosfab/badge_xion
+ name = "Xion Tag"
+ desc = "Used to identify an empty Xion FBP."
+ id = "misc_synth_bag_tag_xion"
+ materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "plastic" = 1000)
+ build_path = /obj/item/clothing/accessory/badge/corporate_tag/xion
+
+/datum/design/item/prosfab/badge_bishop
+ name = "Bishop Tag"
+ desc = "Used to identify an empty Bishop FBP."
+ id = "misc_synth_bag_tag_bishop"
+ materials = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 2000, "plastic" = 500)
+ build_path = /obj/item/clothing/accessory/badge/corporate_tag/bishop
diff --git a/html/changelogs/Mechoid - Robobags.yml b/html/changelogs/Mechoid - Robobags.yml
new file mode 100644
index 0000000000..ec3a6e287e
--- /dev/null
+++ b/html/changelogs/Mechoid - Robobags.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
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Mechoid
+
+# 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, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Adds Robobags and Corp-Tags to Robotics."
diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi
index 4c3546ef78..66f569f009 100644
Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ
diff --git a/icons/obj/robobag.dmi b/icons/obj/robobag.dmi
new file mode 100644
index 0000000000..f87d96ce07
Binary files /dev/null and b/icons/obj/robobag.dmi differ
diff --git a/polaris.dme b/polaris.dme
index 842d2970ea..2591396ed9 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -881,6 +881,7 @@
#include "code\game\objects\items\latexballoon.dm"
#include "code\game\objects\items\paintkit.dm"
#include "code\game\objects\items\poi_items.dm"
+#include "code\game\objects\items\robobag.dm"
#include "code\game\objects\items\shooting_range.dm"
#include "code\game\objects\items\toys.dm"
#include "code\game\objects\items\trash.dm"