From ac21ad9e321bf1d2c7bb546fccee44ca9cb8c4bd Mon Sep 17 00:00:00 2001 From: evilew Date: Tue, 21 May 2024 19:16:08 +0200 Subject: [PATCH] borg fatty tools - added a couple modules to borgs, available to every type of borg: feeding tube, cookie synthesizer and fatoray. They're all available to be made in mech fabricator, after you research NutriTech Weapons or NutriTech Tools - added a cookie synthesizer (humanoid ver), available in NutriTech Tools node --- .../modules/research/designs/nutri_designs.dm | 163 +++++++++++++++++- .../research/techweb/nutritech_nodes.dm | 6 +- GainStation13/icons/obj/feeding_tube.dmi | Bin 3242 -> 4291 bytes _maps/RandomRuins/SpaceRuins/feeders_den.dmm | 2 +- .../objects/items/robot/robot_upgrades.dm | 22 --- 5 files changed, 160 insertions(+), 33 deletions(-) diff --git a/GainStation13/code/modules/research/designs/nutri_designs.dm b/GainStation13/code/modules/research/designs/nutri_designs.dm index b0f2216a..ba187af0 100644 --- a/GainStation13/code/modules/research/designs/nutri_designs.dm +++ b/GainStation13/code/modules/research/designs/nutri_designs.dm @@ -15,7 +15,7 @@ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SECURITY /datum/design/fatoray_cannon_weak - name = "Cannonshot Fatoray" + name = "Basic Cannonshot Fatoray" id = "fatoray_cannon_weak" build_type = PROTOLATHE materials = list(MAT_METAL = 10000, MAT_GLASS = 8000, MAT_CALORITE = 20000) @@ -24,9 +24,9 @@ category = list("Weapons") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SECURITY -/datum/design/alter_ray +/datum/design/alter_ray_metabolism name = "AL-T-Ray: Metabolism" - id = "alter_ray" + id = "alter_ray_metabolism" build_type = PROTOLATHE materials = list(MAT_METAL = 10000, MAT_GLASS = 8000, MAT_CALORITE = 26000) construction_time = 200 @@ -35,7 +35,7 @@ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SECURITY -/datum/design/alter_ray +/datum/design/alter_ray_reverser name = "AL-T-Ray: Reverser" id = "alter_ray_reverser" build_type = PROTOLATHE @@ -55,7 +55,7 @@ construction_time = 75 build_path = /obj/item/clothing/neck/petcollar/calorite category = list("Equipment", "Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + departmental_flags = DEPARTMENTAL_FLAG_ALL /datum/design/cyberimp_nutriment_turbo name = "Nutriment Pump Implant TURBO" @@ -66,7 +66,7 @@ materials = list(MAT_METAL = 800, MAT_GLASS = 800, MAT_GOLD = 750, MAT_URANIUM = 1000) build_path = /obj/item/organ/cyberimp/chest/nutriment/turbo category = list("Misc", "Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE /datum/design/bluespace_belt name = "Bluespace Belt" @@ -74,7 +74,156 @@ id = "bluespace_belt" build_type = PROTOLATHE construction_time = 100 - materials = list(MAT_SILVER = 4000, MAT_GOLD = 4000, MAT_BLUESPACE = 2000) + materials = list(MAT_SILVER = 4000, MAT_GOLD = 4000, MAT_BLUESPACE = 2000, ) build_path = /obj/item/bluespace_belt category = list("Misc", "Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/cookie_synthesizer + name = "Cookie Synthesizer" + desc = "A self-charging miraculous device that's able to produce cookies." + id = "cookie_synthesizer" + build_type = PROTOLATHE + construction_time = 100 + materials = list(MAT_SILVER = 4000, MAT_URANIUM = 1000, MAT_BLUESPACE = 1000, MAT_CALORITE = 2000) + build_path = /obj/item/cookiesynth + category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SERVICE + +//these are made in mech fabricator +/datum/design/borg_cookie_synthesizer + name = "Cyborg Upgrade (Cookie Synthesizer)" + id = "borg_upgrade_cookiesynthesizer" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/cookiesynth + materials = list(MAT_METAL=10000, MAT_GOLD=1500, MAT_URANIUM=250, MAT_PLASMA=1500) + construction_time = 100 + category = list("Cyborg Upgrade Modules") + +/datum/design/borg_fatoray + name = "Cyborg Upgrade (Fatoray)" + id = "borg_upgrade_fatoray" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/fatoray + materials = list(MAT_METAL = 8000, MAT_GLASS = 6000, MAT_CALORITE = 10000) + construction_time = 100 + category = list("Cyborg Upgrade Modules") + +/datum/design/borg_feedtube + name = "Cyborg Upgrade (Feeding Tube)" + id = "borg_upgrade_feedingtube" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/feedtube + materials = list(MAT_METAL = 8000, MAT_GLASS = 6000, MAT_CALORITE = 10000) + construction_time = 100 + category = list("Cyborg Upgrade Modules") + +//todo: make a seperate file for extra borg modules + +/obj/item/borg/upgrade/cookiesynth + name = "cyborg cookie synthesizer" + desc = "An extra module that allows cyborgs to dispense cookies." + icon_state = "cyborg_upgrade3" + +/obj/item/borg/upgrade/cookiesynth/action(mob/living/silicon/robot/R, user = usr) + . = ..() + if(.) + var/obj/item/cookiesynth/S = new(R.module) + R.module.basic_modules += S + R.module.add_module(S, FALSE, TRUE) + +/obj/item/borg/upgrade/cookiesynth/deactivate(mob/living/silicon/robot/R, user = usr) + . = ..() + if (.) + var/obj/item/cookiesynth/S = locate() in R.module + R.module.remove_module(S, TRUE) + + +/obj/item/gun/energy/fatoray/weak/cyborg + name = "cyborg fatoray" + desc = "An integrated fatoray for cyborg use." + icon = 'GainStation13/icons/obj/fatoray.dmi' + icon_state = "fatoray_weak" + can_charge = FALSE + selfcharge = EGUN_SELFCHARGE_BORG + cell_type = /obj/item/stock_parts/cell/secborg + charge_delay = 5 + +/obj/item/borg/upgrade/fatoray + name = "cyborg fatoray module" + desc = "An extra module that allows cyborgs to use fatoray weapons." + icon_state = "cyborg_upgrade3" + +/obj/item/borg/upgrade/fatoray/action(mob/living/silicon/robot/R, user = usr) + . = ..() + if(.) + var/obj/item/gun/energy/fatoray/weak/cyborg/S = new(R.module) + R.module.basic_modules += S + R.module.add_module(S, FALSE, TRUE) + +/obj/item/borg/upgrade/fatoray/deactivate(mob/living/silicon/robot/R, user = usr) + . = ..() + if (.) + var/obj/item/gun/energy/fatoray/weak/cyborg/S = locate() in R.module + R.module.remove_module(S, TRUE) + + + +//cyborg regen feeding tube + +/obj/item/reagent_containers/borghypo/feeding_tube + name = "cyborg feeding tube" + desc = "A feeding tube module for a cyborg." + icon = 'GainStation13/icons/obj/feeding_tube.dmi' + icon_state = "borg_tube" + possible_transfer_amounts = list(5,10,20) + charge_cost = 20 + recharge_time = 3 + accepts_reagent_upgrades = FALSE + reagent_ids = list(/datum/reagent/consumable/cream, /datum/reagent/consumable/milk, /datum/reagent/consumable/nutriment) + +/obj/item/reagent_containers/borghypo/feeding_tube/attack(mob/living/carbon/M, mob/user) + var/datum/reagents/R = reagent_list[mode] + if(!R.total_volume) + to_chat(user, "The injector is empty.") + return + if(!istype(M)) + return + if(R.total_volume && M.can_inject(user, 1, user.zone_selected,bypass_protection)) + to_chat(M, "You feel the cyborg's feeding tube pour liquid down your throat!") + to_chat(user, "You feed [M] with the integrated feeding tube.") + var/fraction = min(amount_per_transfer_from_this/R.total_volume, 1) + R.reaction(M, INJECT, fraction) + if(M.reagents) + var/trans = R.trans_to(M, amount_per_transfer_from_this) + to_chat(user, "[trans] unit\s injected. [R.total_volume] unit\s remaining.") + +/obj/item/reagent_containers/borghypo/feeding_tube/regenerate_reagents() + if(iscyborg(src.loc)) + var/mob/living/silicon/robot/R = src.loc + if(R && R.cell) + for(var/i in modes) //Lots of reagents in this one, so it's best to regenrate them all at once to keep it from being tedious. + var/valueofi = modes[i] + var/datum/reagents/RG = reagent_list[valueofi] + if(RG.total_volume < RG.maximum_volume) + R.cell.use(charge_cost) + RG.add_reagent(reagent_ids[valueofi], 5) + + +/obj/item/borg/upgrade/feedtube + name = "cyborg feeding tube module" + desc = "An extra module that allows cyborgs to use an integrated feeding tube along with a synthesizer." + icon_state = "cyborg_upgrade3" + +/obj/item/borg/upgrade/feedtube/action(mob/living/silicon/robot/R, user = usr) + . = ..() + if(.) + var/obj/item/reagent_containers/borghypo/feeding_tube/S = new(R.module) + R.module.basic_modules += S + R.module.add_module(S, FALSE, TRUE) + +/obj/item/borg/upgrade/feedtube/deactivate(mob/living/silicon/robot/R, user = usr) + . = ..() + if (.) + var/obj/item/reagent_containers/borghypo/feeding_tube/S = locate() in R.module + R.module.remove_module(S, TRUE) diff --git a/GainStation13/code/modules/research/techweb/nutritech_nodes.dm b/GainStation13/code/modules/research/techweb/nutritech_nodes.dm index b7a3f2b4..3abd3cf6 100644 --- a/GainStation13/code/modules/research/techweb/nutritech_nodes.dm +++ b/GainStation13/code/modules/research/techweb/nutritech_nodes.dm @@ -4,8 +4,8 @@ id = "nutritech_tools" display_name = "Nutri-Tech Tools" description = "Ending world hunger was never made easier!" - prereq_ids = list("biotech", "adv_engi") // add "engineering" if the designs get complicated later on - design_ids = list("calorite_collar", "ci-nutrimentturbo", "bluespace_belt", "adipoelectric_transformer") + prereq_ids = list("biotech", "adv_engi") + design_ids = list("calorite_collar", "ci-nutrimentturbo", "bluespace_belt", "adipoelectric_transformer", "cookie_synthesizer", "borg_upgrade_cookiesynthesizer", "borg_upgrade_feedingtube") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) boost_item_paths = list(/obj/item/gun/energy/fatoray, /obj/item/gun/energy/fatoray/cannon, /obj/item/trash/fatoray_scrap1, /obj/item/trash/fatoray_scrap2) export_price = 5000 @@ -16,7 +16,7 @@ display_name = "Nutri-Tech Weapons" description = "Ever wanted to reach your daily caloric intake in just 5 seconds?" prereq_ids = list("biotech", "adv_engi") - design_ids = list("fatoray_weak", "fatoray_cannon_weak", "alter_ray", "alter_ray_reverser") + design_ids = list("fatoray_weak", "fatoray_cannon_weak", "alter_ray_metabolism", "alter_ray_reverser", "borg_upgrade_fatoray") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) boost_item_paths = list(/obj/item/gun/energy/fatoray, /obj/item/gun/energy/fatoray/cannon, /obj/item/trash/fatoray_scrap1, /obj/item/trash/fatoray_scrap2) export_price = 10000 diff --git a/GainStation13/icons/obj/feeding_tube.dmi b/GainStation13/icons/obj/feeding_tube.dmi index 32abee8b76a190f43a76ea165ff22ea4643e0204..b989e8ca7edc254d458af63adcb099a82543fceb 100644 GIT binary patch literal 4291 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