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"