diff --git a/code/game/objects/effects/spawners/random/pool/space_loot.dm b/code/game/objects/effects/spawners/random/pool/space_loot.dm index e60150bab53..06fd29d8883 100644 --- a/code/game/objects/effects/spawners/random/pool/space_loot.dm +++ b/code/game/objects/effects/spawners/random/pool/space_loot.dm @@ -55,6 +55,10 @@ /obj/item/storage/toolbox/syndicate, /obj/item/suppressor, /obj/item/toy/syndicateballoon, + /obj/item/ai_upgrade/expanded_storage, + /obj/item/ai_upgrade/expanded_network, + /obj/item/ai_upgrade/expanded_tank, + /obj/item/ai_upgrade/expanded_fabricator, ) /obj/effect/spawner/random/pool/spaceloot/syndicate/common/depot diff --git a/code/game/objects/effects/spawners/random/traders/trader_department_spawners.dm b/code/game/objects/effects/spawners/random/traders/trader_department_spawners.dm index 8f164aedca1..ed8351471eb 100644 --- a/code/game/objects/effects/spawners/random/traders/trader_department_spawners.dm +++ b/code/game/objects/effects/spawners/random/traders/trader_department_spawners.dm @@ -98,6 +98,10 @@ // Might as well let AI be interested /obj/item/ai_upgrade/surveillance_upgrade = 25, + /obj/item/ai_upgrade/expanded_storage = 10, + /obj/item/ai_upgrade/expanded_network = 10, + /obj/item/ai_upgrade/expanded_tank = 10, + /obj/item/ai_upgrade/expanded_fabricator = 10, ) /obj/effect/spawner/random/traders/medical diff --git a/code/game/objects/items/robot/ai_upgrades.dm b/code/game/objects/items/robot/ai_upgrades.dm index dcedf09e0f6..6bb05201d42 100644 --- a/code/game/objects/items/robot/ai_upgrades.dm +++ b/code/game/objects/items/robot/ai_upgrades.dm @@ -59,3 +59,57 @@ return to_chat(user, "You reset [AI]'s program storage to factory settings.") AI.reset_programs() + +// Expanded Storage +/obj/item/ai_upgrade/expanded_storage + name = "expanded storage upgrade" + desc = "An experimental upgrade labelled EX.ST. Within is an algorithm to compress an AI's processes, granting them spare memory." + +/obj/item/ai_upgrade/expanded_storage/ai_upgrade_action(mob/living/silicon/ai/AI, mob/user) + if(!istype(AI)) + return + to_chat(AI, "[user] has upgraded you an expanded storage module. Extra memory granted!") + AI.program_picker.total_memory += 2 + AI.program_picker.memory += 2 + to_chat(user, "You upgrade [AI]. [src] is consumed in the process.") + qdel(src) + +// Expanded Network Array +/obj/item/ai_upgrade/expanded_network + name = "expanded network array upgrade" + desc = "An experimental upgrade labelled EX.AR. Within is an algorithm to optimize an AI's network, granting them spare bandwidth." + +/obj/item/ai_upgrade/expanded_network/ai_upgrade_action(mob/living/silicon/ai/AI, mob/user) + if(!istype(AI)) + return + to_chat(AI, "[user] has upgraded you an expanded network array module. Extra bandwidth granted!") + AI.program_picker.total_bandwidth += 1 + AI.program_picker.bandwidth += 1 + to_chat(user, "You upgrade [AI]. [src] is consumed in the process.") + qdel(src) + +// Expanded Nanite Tank +/obj/item/ai_upgrade/expanded_tank + name = "expanded nanite tank upgrade" + desc = "An experimental upgrade labelled NA.TA. Within is a bluespace compacting program to make an AI's nanite reserves just a bit bigger." + +/obj/item/ai_upgrade/expanded_tank/ai_upgrade_action(mob/living/silicon/ai/AI, mob/user) + if(!istype(AI)) + return + to_chat(AI, "[user] has upgraded you an expanded nanite tank module. Extra nanite storage capacity granted!") + AI.program_picker.max_nanites += 10 + to_chat(user, "You upgrade [AI]. [src] is consumed in the process.") + qdel(src) + +// Expanded Nanite Fabricator +/obj/item/ai_upgrade/expanded_fabricator + name = "expanded nanite fabricator upgrade" + desc = "An experimental upgrade labelled NA.FA. Within is a program to compress the fabricators of an AI's nanites, allowing them to construct them quicker." + +/obj/item/ai_upgrade/expanded_fabricator/ai_upgrade_action(mob/living/silicon/ai/AI, mob/user) + if(!istype(AI)) + return + to_chat(AI, "[user] has upgraded you an expanded nanite fabricator module. Extra nanite regeneration granted!") + AI.nanite_regen += 0.5 + to_chat(user, "You upgrade [AI]. [src] is consumed in the process.") + qdel(src) diff --git a/code/modules/mob/living/silicon/ai/ai_mob.dm b/code/modules/mob/living/silicon/ai/ai_mob.dm index 9b1feaf64b1..e89e588c5b1 100644 --- a/code/modules/mob/living/silicon/ai/ai_mob.dm +++ b/code/modules/mob/living/silicon/ai/ai_mob.dm @@ -70,6 +70,8 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( // AI Powers var/datum/program_picker/program_picker var/datum/spell/ai_spell/choose_program/program_action + /// Base rate of nanite regen + var/nanite_regen = 1 /// Whether or not the AI has unlocked universal adapter var/universal_adapter = FALSE /// How effective is the adapter? @@ -331,7 +333,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( var/list/status_tab_data = ..() . = status_tab_data status_tab_data[++status_tab_data.len] = list("Nanites:", "[program_picker.nanites] / [program_picker.max_nanites]") - status_tab_data[++status_tab_data.len] = list("Nanite Manufacture Rate:", "[(1 + 0.5 * program_picker.bandwidth)]") + status_tab_data[++status_tab_data.len] = list("Nanite Manufacture Rate:", "[(nanite_regen + 0.5 * program_picker.bandwidth)]") if(stat) status_tab_data[++status_tab_data.len] = list("System status:", "Nonfunctional") return @@ -438,7 +440,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( qdel(src) return // Regenerate nanites for abilities only when powered. - powered_ai.program_picker.nanites = min(100, powered_ai.program_picker.nanites + (1 + 0.5 * powered_ai.program_picker.bandwidth)) + powered_ai.program_picker.nanites = min(powered_ai.program_picker.max_nanites, powered_ai.program_picker.nanites + (powered_ai.nanite_regen + 0.5 * powered_ai.program_picker.bandwidth)) if(!powered_ai.anchored) loc = powered_ai.loc change_power_mode(NO_POWER_USE)