diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index eb35afea771..0defa6ef771 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -1338,6 +1338,97 @@ user << "\blue [trans] units injected. [reagents.total_volume] units remaining in the hypospray." return +/obj/item/weapon/reagent_containers/borghypo + name = "Cyborg Hypospray" + desc = "An advanced chemical synthesizer and injection system, designed for heavy-duty medical equipment." + icon = 'syringe.dmi' + item_state = "hypo" + icon_state = "borghypo" + amount_per_transfer_from_this = 5 + volume = 30 + possible_transfer_amounts = null + flags = FPRINT + var/mode = 1 + var/charge_cost = 100 + var/charge_tick = 0 + var/recharge_time = 10 //Time it takes for shots to recharge (in seconds) + + New() + ..() + processing_objects.Add(src) + + + Del() + processing_objects.Remove(src) + ..() + + process() //Every [recharge_time] seconds, recharge some reagents for the cyborg + charge_tick++ + if(charge_tick < recharge_time) return 0 + charge_tick = 0 + + if(isrobot(src.loc)) + var/mob/living/silicon/robot/R = src.loc + if(R && R.cell) + if(mode == 1 && reagents.total_volume < 30) //Don't recharge reagents and drain power if the storage is full. + R.cell.use(charge_cost) //Take power from borg... + reagents.add_reagent("tricordrazine",10) //And fill hypo with reagent. + if(mode == 2 && reagents.total_volume < 30) + R.cell.use(charge_cost) + reagents.add_reagent("inaprovaline", 10) + if(mode == 3 && reagents.total_volume < 30) + R.cell.use(charge_cost) + reagents.add_reagent("spaceacillin", 10) + //update_icon() + return 1 + +/obj/item/weapon/reagent_containers/borghypo/attack(mob/M as mob, mob/user as mob) + if(!reagents.total_volume) + user << "\red The injector is empty." + return + if (!( istype(M, /mob) )) + return + if (reagents.total_volume) + user << "\blue You inject [M] with the injector." + M << "\red You feel a tiny prick!" + + src.reagents.reaction(M, INGEST) + if(M.reagents) + var/trans = reagents.trans_to(M, amount_per_transfer_from_this) + user << "\blue [trans] units injected. [reagents.total_volume] units remaining." + return + +/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user as mob) + playsound(src.loc, 'pop.ogg', 50, 0) //Change the mode + if(mode == 1) + mode = 2 + reagents.clear_reagents() //Flushes whatever was in the storage previously, so you don't get chems all mixed up. + user << "\blue Synthesizer is now producing 'Inaprovaline'." + return + if(mode == 2) + mode = 3 + reagents.clear_reagents() + user << "\blue Synthesizer is now producing 'Spaceacillin'." + return + if(mode == 3) + mode = 1 + reagents.clear_reagents() + user << "\blue Synthesizer is now producing 'Tricordrazine'." + return + +/obj/item/weapon/reagent_containers/borghypo/examine() + set src in view() + ..() + if (!(usr in view(2)) && usr!=src.loc) return + + if(reagents && reagents.reagent_list.len) + for(var/datum/reagent/R in reagents.reagent_list) + usr << "\blue It currently has [R.volume] units of [R.name] stored." + else + usr << "\blue It is currently empty. Allow some time for the internal syntheszier to produce more." + + + /obj/item/weapon/reagent_containers/hypospray/ert name = "emergency hypospray" desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients." @@ -1592,7 +1683,8 @@ istype(W, /obj/item/weapon/circular_saw) || \ istype(W, /obj/item/weapon/melee/energy/sword) && W:active || \ istype(W, /obj/item/weapon/melee/energy/blade) || \ - istype(W, /obj/item/weapon/shovel) \ + istype(W, /obj/item/weapon/shovel) || \ + istype(W, /obj/item/weapon/hatchet) \ ) inaccurate = 1 /*else if(W.w_class <= 2 && istype(src,/obj/item/weapon/reagent_containers/food/snacks/sliceable)) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 53321d6748f..2962b346929 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -59,37 +59,12 @@ ..() src.modules += new /obj/item/borg/sight/hud/med(src) src.modules += new /obj/item/device/healthanalyzer(src) - src.modules += new /obj/item/weapon/reagent_containers/syringe/robot/antitoxin(src) - src.modules += new /obj/item/weapon/reagent_containers/syringe/robot/inaprovaline(src) - src.modules += new /obj/item/weapon/reagent_containers/syringe/robot/mixed(src) - src.modules += new /obj/item/weapon/reagent_containers/syringe(src) - src.modules += new /obj/item/weapon/reagent_containers/syringe(src) - src.modules += new /obj/item/weapon/reagent_containers/glass/bottle/robot/inaprovaline(src) - src.modules += new /obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin(src) - src.modules += new /obj/item/weapon/reagent_containers/glass/beaker(src) + src.modules += new /obj/item/weapon/reagent_containers/borghypo + src.modules += new /obj/item/weapon/reagent_containers/glass/large(src) src.modules += new /obj/item/weapon/reagent_containers/robodropper(src) - src.emag = new /obj/item/weapon/reagent_containers/pill/cyanide(src) - src.modules += new /obj/item/weapon/reagent_containers/pill/dexalin(src) - src.modules += new /obj/item/weapon/reagent_containers/pill/antitox(src) - src.modules += new /obj/item/weapon/reagent_containers/pill/kelotane(src) - src.modules += new /obj/item/weapon/reagent_containers/pill/bicaridine(src) - return - - - respawn_consumable(var/mob/living/silicon/robot/R) - var/list/what = list ( - /obj/item/weapon/reagent_containers/pill/dexalin, - /obj/item/weapon/reagent_containers/pill/antitox, - /obj/item/weapon/reagent_containers/pill/kelotane, - /obj/item/weapon/reagent_containers/pill/bicaridine - ) - for (var/T in what) - if (!(locate(T) in src.modules)) - src.modules -= null - var/O = new T(src) - src.modules += O - if (R.emagged && !src.emag) //thanks to cyborg-900 for uncovering this - src.emag = new /obj/item/weapon/reagent_containers/pill/cyanide(src) + src.modules += new /obj/item/weapon/reagent_containers/syringe + src.modules += new /obj/item/weapon/extinguisher/mini + src.emag = new /obj/item/weapon/circular_saw return @@ -167,7 +142,8 @@ New() ..() src.modules += new /obj/item/weapon/soap/nanotrasen(src) - src.modules += new /obj/item/weapon/trashbag(src) + src.modules += new /obj/item/weapon/trashbag + src.modules += new/obj/item/weapon/mop src.emag = new /obj/item/weapon/cleaner(src) var/datum/reagents/R = new/datum/reagents(1000)