diff --git a/GainStation13/code/modules/research/nanites/nanite_programs/fattening.dm b/GainStation13/code/modules/research/nanites/nanite_programs/fattening.dm index 926d6526..8bada8b6 100644 --- a/GainStation13/code/modules/research/nanites/nanite_programs/fattening.dm +++ b/GainStation13/code/modules/research/nanites/nanite_programs/fattening.dm @@ -109,3 +109,53 @@ id = "fat_adjuster_nanites" program_type = /datum/nanite_program/fat_adjuster category = list("Medical Nanites") + +/datum/nanite_program/fat_converter + name = "Adipose Conversion" + desc = "Nanites learn to convert excess body mass to replicate." + rogue_types = list(/datum/nanite_program/necrotic) + +/datum/nanite_program/fat_converter/check_conditions() + if(iscarbon(host_mob)) + var/mob/living/carbon/C = host_mob + if(C.fatness_real <= 0 || nanites.nanite_volume >= nanites.max_nanites) + return FALSE + else + return FALSE + return ..() + +/datum/nanite_program/fat_converter/active_effect() + if(iscarbon(host_mob)) + var/mob/living/carbon/C = host_mob + if(C.fatness_real > 0 && nanites.nanite_volume < nanites.max_nanites) + nanites.adjust_nanites(src, min(round(C.fatness_real), 5)) + C.adjust_fatness(-(min(round(C.fatness_real), 5)), FATTENING_TYPE_WEIGHT_LOSS) + +/datum/design/nanites/fat_converter + name = "Adipose Conversion" + desc = "The nanites use fat to replicate quickly." + id = "fat_converter_nanites" + program_type = /datum/nanite_program/fat_converter + category = list("Medical Nanites") + +/datum/nanite_program/bwomf + name = "B.W.O.M.F." //Body Widening Operation for Mass Fattening + desc = "Nanites remains on standy-by, massively increasing the host's mass on trigger.." + unique = FALSE + can_trigger = TRUE + trigger_cost = 50 + trigger_cooldown = 50 + rogue_types = list(/datum/nanite_program/toxic) + +/datum/nanite_program/bwomf/on_trigger(comm_message) + if(iscarbon(host_mob)) + var/mob/living/carbon/C = host_mob + C.adjust_fatness(100, FATTENING_TYPE_ITEM) + to_chat(C, "[pick("Your belly expands quickly!", "Fat envelops you further!", "Lard grows all over you!")]") + +/datum/design/nanites/bwomf + name = "B.W.O.M.F." + desc = "Massively increase host's mass on trigger." + id = "bwomf_nanites" + program_type = /datum/nanite_program/bwomf + category = list("Medical Nanites") diff --git a/GainStation13/code/modules/research/techweb/nutritech_nodes.dm b/GainStation13/code/modules/research/techweb/nutritech_nodes.dm index 3abd3cf6..568d6b81 100644 --- a/GainStation13/code/modules/research/techweb/nutritech_nodes.dm +++ b/GainStation13/code/modules/research/techweb/nutritech_nodes.dm @@ -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_metabolism", "alter_ray_reverser", "borg_upgrade_fatoray") + design_ids = list("fatoray_weak", "fatoray_cannon_weak", "alter_ray_metabolism", "alter_ray_reverser", "borg_upgrade_fatoray", "bwomf_nanites") 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/code/obj/items/minor_items.dm b/GainStation13/code/obj/items/minor_items.dm index 59b41b7f..c9910f5c 100644 --- a/GainStation13/code/obj/items/minor_items.dm +++ b/GainStation13/code/obj/items/minor_items.dm @@ -157,3 +157,9 @@ else icon_state = "sign_closed" desc = "A sign that reads 'closed'" + +/obj/item/trash/odd_disk + name = "odd disk" + icon = 'icons/obj/module.dmi' + icon_state = "datadisk0" + desc = "A dusty disk, desconstruction will be needed to recover data." diff --git a/code/__DEFINES/nanites.dm b/code/__DEFINES/nanites.dm index a3dd8338..4a4a43eb 100644 --- a/code/__DEFINES/nanites.dm +++ b/code/__DEFINES/nanites.dm @@ -46,3 +46,8 @@ //GS13 DEFINES #define NES_FATNESS "BFI" #define NES_FAT_GAIN_LOSS "Loss/Gain" + +//PROTOCOLS + +#define NANITE_PROTOCOL_REPLICATION 1 +#define NANITE_PROTOCOL_STORAGE 2 diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 3eb74d5c..1212e2d8 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -113,6 +113,7 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/item/storage/pill_bottle/breast_enlargement = 2, /obj/item/trash/fatoray_scrap1 = 1, //GS13 - added for researching fat guns /obj/item/trash/fatoray_scrap2 = 1, //GS13 + /obj/item/trash/odd_disk = 1, //GS13 /obj/item/clothing/shoes/wheelys = 1, /obj/item/clothing/shoes/kindleKicks = 1, /obj/item/autosurgeon/penis = 1, diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm index bf395ccd..2d7733c9 100644 --- a/code/datums/components/nanites.dm +++ b/code/datums/components/nanites.dm @@ -252,7 +252,7 @@ nanite_volume = CLAMP(amount, 0, max_nanites) /datum/component/nanites/proc/set_max_volume(datum/source, amount) - max_nanites = max(1, max_nanites) + max_nanites = max(1, amount) /datum/component/nanites/proc/set_cloud(datum/source, amount) cloud_id = CLAMP(amount, 0, 100) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 5f968c58..82c43924 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -76,6 +76,7 @@ /obj/item/trash/candy = 1, /obj/item/trash/fatoray_scrap1 = 1, // GS13 /obj/item/trash/fatoray_scrap2 = 1, + /obj/item/trash/odd_disk = 1, /obj/item/trash/chips = 1, /obj/item/reagent_containers/food/snacks/deadmouse = 1, /obj/item/trash/pistachios = 1, diff --git a/code/modules/research/designs/nanite_designs.dm b/code/modules/research/designs/nanite_designs.dm index c72ee4fb..9c807eea 100644 --- a/code/modules/research/designs/nanite_designs.dm +++ b/code/modules/research/designs/nanite_designs.dm @@ -525,36 +525,3 @@ id = "sensor_nanite_volume" program_type = /datum/nanite_program/sensor/nanite_volume category = list("Sensor Nanites") - -////////////////////NANITE PROTOCOLS////////////////////////////////////// -//Note about the category name: The UI cuts the last 8 characters from the category name to remove the " Nanites" in the other categories -//Because of this, Protocols was getting cut down to "P", so i had to add some padding -/* -/datum/design/nanites/kickstart - name = "Kickstart Protocol" - desc = "Replication Protocol: the nanites focus on early growth, heavily boosting replication rate for a few minutes after the initial implantation." - id = "kickstart_nanites" - program_type = /datum/nanite_program/protocol/kickstart - category = list("Protocols_Nanites") - -/datum/design/nanites/factory - name = "Factory Protocol" - desc = "Replication Protocol: the nanites build a factory matrix within the host, gradually increasing replication speed over time. The factory decays if the protocol is not active." - id = "factory_nanites" - program_type = /datum/nanite_program/protocol/factory - category = list("Protocols_Nanites") - -/datum/design/nanites/tinker - name = "Tinker Protocol" - desc = "Replication Protocol: the nanites learn to use metallic material in the host's bloodstream to speed up the replication process." - id = "tinker_nanites" - program_type = /datum/nanite_program/protocol/tinker - category = list("Protocols_Nanites") - -/datum/design/nanites/offline - name = "Offline Production Protocol" - desc = "Replication Protocol: while the host is asleep or otherwise unconcious, the nanites exploit the reduced interference to replicate more quickly." - id = "offline_nanites" - program_type = /datum/nanite_program/protocol/offline - category = list("Protocols_Nanites") -*/ diff --git a/code/modules/research/nanites/nanite_program_hub.dm b/code/modules/research/nanites/nanite_program_hub.dm index ea4392f2..e12f6ec1 100644 --- a/code/modules/research/nanites/nanite_program_hub.dm +++ b/code/modules/research/nanites/nanite_program_hub.dm @@ -21,7 +21,7 @@ list(name = "Augmentation Nanites"), list(name = "Suppression Nanites"), list(name = "Weaponized Nanites"), - //list(name = "Protocols") B.E.P.I.S Content, which we dont have + list(name = "Protocols") ) /obj/machinery/nanite_program_hub/Initialize() diff --git a/code/modules/research/nanites/nanite_programs/protocols.dm b/code/modules/research/nanites/nanite_programs/protocols.dm index 73976abe..8d67f1f6 100644 --- a/code/modules/research/nanites/nanite_programs/protocols.dm +++ b/code/modules/research/nanites/nanite_programs/protocols.dm @@ -105,3 +105,66 @@ /datum/nanite_program/protocol/offline/active_effect() nanites.adjust_nanites(null, boost) + +/datum/nanite_program/protocol/hive + name = "Hive Protocol" + desc = "The nanites use a more efficient grid arrangment for volume storage, increasing maximum volume in a host by 250." + rogue_types = list(/datum/nanite_program/skin_decay) + protocol_class = NANITE_PROTOCOL_STORAGE + +/datum/nanite_program/protocol/hive/enable_passive_effect() + nanites.set_max_volume(src, nanites.max_nanites + 250) + ..() + +/datum/nanite_program/protocol/hive/disable_passive_effect() + nanites.set_max_volume(src, nanites.max_nanites - 250) + ..() + +////////////////////NANITE PROTOCOLS////////////////////////////////////// +//Note about the category name: The UI cuts the last 8 characters from the category name to remove the " Nanites" in the other categories +//Because of this, Protocols was getting cut down to "P", so i had to add some padding +/datum/design/nanites/kickstart + name = "Kickstart Protocol" + desc = "Replication Protocol: the nanites focus on early growth, heavily boosting replication rate for a few minutes after the initial implantation." + id = "kickstart_nanites" + program_type = /datum/nanite_program/protocol/kickstart + category = list("Protocols_Nanites") + +/datum/design/nanites/factory + name = "Factory Protocol" + desc = "Replication Protocol: the nanites build a factory matrix within the host, gradually increasing replication speed over time. The factory decays if the protocol is not active." + id = "factory_nanites" + program_type = /datum/nanite_program/protocol/factory + category = list("Protocols_Nanites") + +/datum/design/nanites/tinker + name = "Tinker Protocol" + desc = "Replication Protocol: the nanites learn to use metallic material in the host's bloodstream to speed up the replication process." + id = "tinker_nanites" + program_type = /datum/nanite_program/protocol/tinker + category = list("Protocols_Nanites") + +/datum/design/nanites/offline + name = "Offline Production Protocol" + desc = "Replication Protocol: while the host is asleep or otherwise unconcious, the nanites exploit the reduced interference to replicate more quickly." + id = "offline_nanites" + program_type = /datum/nanite_program/protocol/offline + category = list("Protocols_Nanites") + +/datum/design/nanites/hive + name = "Hive Protocol" + desc = "Storage Protocol: safely increases the maximum volume of nanites in the host by 250." + id = "hive_nanites" + program_type = /datum/nanite_program/protocol/hive + category = list("Protocols_Nanites") + +/datum/techweb_node/nanite_protocol + id = "nanite_protocol" + display_name = "Nanite Protocols" + description = "Advanced nanite protocols that massively increase their efficiency." + prereq_ids = list("nanite_synaptic", "nanite_harmonic") + design_ids = list("kickstart_nanites","factory_nanites","tinker_nanites", "offline_nanites", "hive_nanites") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) + export_price = 15000 + boost_item_paths = list(/obj/item/trash/odd_disk) + hidden = TRUE diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 49f63491..dd36a35e 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -999,7 +999,7 @@ description = "Nanite programs that require complex biological interaction." prereq_ids = list("nanite_base","biotech") design_ids = list("regenerative_nanites", "bloodheal_nanites", "coagulating_nanites","poison_nanites","flesheating_nanites",\ - "sensor_crit_nanites","sensor_death_nanites", "sensor_health_nanites", "sensor_damage_nanites", "fat_sensor_nanites", "fat_adjuster_nanites") + "sensor_crit_nanites","sensor_death_nanites", "sensor_health_nanites", "sensor_damage_nanites", "fat_sensor_nanites", "fat_converter_nanites", "fat_adjuster_nanites") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 diff --git a/tgstation.dme b/tgstation.dme index 992ea06e..65903ef3 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2784,6 +2784,7 @@ #include "code\modules\research\nanites\nanite_program_hub.dm" #include "code\modules\research\nanites\nanite_programmer.dm" #include "code\modules\research\nanites\nanite_programs.dm" +#include "code\modules\research\nanites\nanite_programs\protocols.dm" #include "code\modules\research\nanites\nanite_remote.dm" #include "code\modules\research\nanites\program_disks.dm" #include "code\modules\research\nanites\public_chamber.dm"