diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index a338588df0..4d7179bbfc 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -504,7 +504,7 @@ var/global/list/robot_modules = list( src.modules += L src.modules += new /obj/item/weapon/tray/robotray(src) - src.modules += new /obj/item/weapon/reagent_containers/food/drinks/shaker(src) + src.modules += new /obj/item/weapon/reagent_containers/borghypo/service(src) src.emag = new /obj/item/weapon/reagent_containers/food/drinks/cans/beer(src) var/datum/reagents/R = new/datum/reagents(50) diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index 985ed3d9d2..47c80d42a1 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -1,5 +1,5 @@ /obj/item/weapon/reagent_containers/borghypo - name = "Cyborg Hypospray" + name = "cyborg hypospray" desc = "An advanced chemical synthesizer and injection system, designed for heavy-duty medical equipment." icon = 'icons/obj/syringe.dmi' item_state = "hypo" @@ -7,13 +7,15 @@ amount_per_transfer_from_this = 5 volume = 30 possible_transfer_amounts = null + var/mode = 1 var/charge_cost = 50 var/charge_tick = 0 var/recharge_time = 5 //Time it takes for shots to recharge (in seconds) - var/list/datum/reagents/reagent_list = list() var/list/reagent_ids = list("tricordrazine", "inaprovaline", "spaceacillin") + var/list/reagent_volumes = list() + var/list/reagent_names = list() /obj/item/weapon/reagent_containers/borghypo/surgeon reagent_ids = list("bicaridine", "inaprovaline", "dexalin") @@ -23,79 +25,114 @@ /obj/item/weapon/reagent_containers/borghypo/New() ..() - for(var/R in reagent_ids) - add_reagent(R) + + for(var/T in reagent_ids) + reagent_volumes[T] = volume + var/datum/reagent/R = chemical_reagents_list[T] + reagent_names += R.name processing_objects.Add(src) - /obj/item/weapon/reagent_containers/borghypo/Destroy() processing_objects.Remove(src) ..() -/obj/item/weapon/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg - charge_tick++ - if(charge_tick < recharge_time) return 0 +/obj/item/weapon/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg+ + if(++charge_tick < recharge_time) + return 0 charge_tick = 0 if(isrobot(loc)) var/mob/living/silicon/robot/R = loc if(R && R.cell) - var/datum/reagents/RG = reagent_list[mode] - if(RG.total_volume < RG.maximum_volume) //Don't recharge reagents and drain power if the storage is full. - R.cell.use(charge_cost) //Take power from borg... - RG.add_reagent(reagent_ids[mode], 5) //And fill hypo with reagent. + for(var/T in reagent_ids) + if(reagent_volumes[T] < volume) + R.cell.use(charge_cost) + reagent_volumes[T] = min(reagent_volumes[T] + 5, volume) return 1 -// Use this to add more chemicals for the borghypo to produce. -/obj/item/weapon/reagent_containers/borghypo/proc/add_reagent(var/reagent) - reagent_ids |= reagent - var/datum/reagents/RG = new(30) - RG.my_atom = src - reagent_list += RG +/obj/item/weapon/reagent_containers/borghypo/attack(var/mob/living/M, var/mob/user) + if(!istype(M)) + return - var/datum/reagents/R = reagent_list[reagent_list.len] - R.add_reagent(reagent, 30) - -/obj/item/weapon/reagent_containers/borghypo/attack(mob/living/M as mob, mob/user as mob) - var/datum/reagents/R = reagent_list[mode] - if(!R.total_volume) + if(!reagent_volumes[reagent_ids[mode]]) user << "The injector is empty." return - if (!istype(M)) - return - if (R.total_volume && M.can_inject(user, 1)) + if(M.can_inject(user, 1)) user << "You inject [M] with the injector." M << "You feel a tiny prick!" if(M.reagents) - var/trans = R.trans_to_mob(M, amount_per_transfer_from_this, CHEM_BLOOD) - user << "[trans] units injected. [R.total_volume] units remaining." + var/t = min(amount_per_transfer_from_this, reagent_volumes[reagent_ids[mode]]) + M.reagents.add_reagent(reagent_ids[mode], t) + reagent_volumes[reagent_ids[mode]] -= t + admin_inject_log(user, M, src, reagent_ids[mode], t) + user << "[t] units injected. [reagent_volumes[reagent_ids[mode]]] units remaining." return -/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user as mob) - playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) //Change the mode - mode++ - if(mode > reagent_list.len) - mode = 1 +/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user as mob) //Change the mode + var/t = "" + for(var/i = 1 to reagent_ids.len) + if(t) + t += ", " + if(mode == i) + t += "[reagent_names[i]]" + else + t += "[reagent_names[i]]" + t = "Available reagents: [t]." + user << t - charge_tick = 0 //Prevents wasted chems/cell charge if you're cycling through modes. - var/datum/reagent/R = chemical_reagents_list[reagent_ids[mode]] - user << "Synthesizer is now producing '[R.name]'." return +/obj/item/weapon/reagent_containers/borghypo/Topic(var/href, var/list/href_list) + if(href_list["reagent"]) + var/t = reagent_ids.Find(href_list["reagent"]) + if(t) + playsound(loc, 'sound/effects/pop.ogg', 50, 0) + mode = t + var/datum/reagent/R = chemical_reagents_list[reagent_ids[mode]] + usr << "Synthesizer is now producing '[R.name]'." + /obj/item/weapon/reagent_containers/borghypo/examine(mob/user) if(!..(user, 2)) return - var/empty = 1 + var/datum/reagent/R = chemical_reagents_list[reagent_ids[mode]] - for(var/datum/reagents/RS in reagent_list) - var/datum/reagent/R = locate() in RS.reagent_list - if(R) - user << "It currently has [R.volume] units of [R.name] stored." - empty = 0 + user << "It is currently producing [R.name] and has [reagent_volumes[reagent_ids[mode]]] out of [volume] units left." - if(empty) - user << "It is currently empty. Allow some time for the internal syntheszier to produce more." +/obj/item/weapon/reagent_containers/borghypo/service + name = "cyborg drink synthesizer" + desc = "A portable drink dispencer." + icon = 'icons/obj/drinks.dmi' + icon_state = "shaker" + charge_cost = 20 + recharge_time = 3 + volume = 60 + possible_transfer_amounts = list(5, 10, 20, 30) + reagent_ids = list("beer", "kahlua", "whiskey", "wine", "vodka", "gin", "rum", "tequilla", "vermouth", "cognac", "ale", "mead", "water", "sugar", "ice", "tea", "icetea", "cola", "spacemountainwind", "dr_gibb", "space_up", "tonic", "sodawater", "lemon_lime", "orangejuice", "limejuice", "watermelonjuice") + +/obj/item/weapon/reagent_containers/borghypo/service/attack(var/mob/M, var/mob/user) + return + +/obj/item/weapon/reagent_containers/borghypo/service/afterattack(var/obj/target, var/mob/user, var/proximity) + if(!proximity) + return + + if(!target.is_open_container() || !target.reagents) + return + + if(!reagent_volumes[reagent_ids[mode]]) + user << "[src] is out of this reagent, give it some time to refill." + return + + if(!target.reagents.get_free_space()) + user << "[target] is full." + return + + var/t = min(amount_per_transfer_from_this, reagent_volumes[reagent_ids[mode]]) + target.reagents.add_reagent(reagent_ids[mode], t) + reagent_volumes[reagent_ids[mode]] -= t + user << "You transfer [t] units of the solution to [target]." + return diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index 43a406153c..f70e06f421 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -18,7 +18,6 @@ attack(mob/M as mob, mob/user as mob, def_zone) if(standard_feed_mob(user, M)) - robot_refill(user) return return 0 @@ -29,22 +28,10 @@ if(standard_dispenser_refill(user, target)) return if(standard_pour_into(user, target)) - robot_refill(user) return return ..() - proc/robot_refill(var/mob/living/silicon/robot/user) - if(!istype(user)) - return 0 - - user.cell.use(30) - var/refill = reagents.get_master_reagent_id() - user << "Now synthesizing [amount_per_transfer_from_this] units of [refill]..." - spawn(300) - reagents.add_reagent(refill, amount_per_transfer_from_this) - user << "Cyborg [src] refilled." - self_feed_message(var/mob/user) user << "You swallow a gulp from \the [src]." diff --git a/html/changelogs/Kelenius-ofBorgsAndShakers.yml b/html/changelogs/Kelenius-ofBorgsAndShakers.yml new file mode 100644 index 0000000000..5f33874986 --- /dev/null +++ b/html/changelogs/Kelenius-ofBorgsAndShakers.yml @@ -0,0 +1,6 @@ +author: Kelenius + +delete-after: True +changes: + - tweak: "Borg shaker now works similarly to hypospray. It generates reagents that can be poured into glasses." + - bugfix: "Therefore, they can no longer duplicate rare reagents such as phoron."