diff --git a/code/game/objects/items/surplus_voucher_ch.dm b/code/game/objects/items/surplus_voucher_ch.dm
new file mode 100644
index 0000000000..82e005de73
--- /dev/null
+++ b/code/game/objects/items/surplus_voucher_ch.dm
@@ -0,0 +1,192 @@
+// Contains the supply vouchers for taskmanager.dm
+/obj/item/surplus_voucher
+ icon = 'icons/obj/items.dmi'
+ icon_state = "pizza_voucher"
+ throwforce = 0
+ throw_speed = 5
+ throw_range = 4
+ force = 0
+
+/obj/item/surplus_voucher/com
+ name = "Reward Surplus Voucher"
+ desc = "A surplus voucher! This one is meant to reward valued employees! Activate it for your surplus delivery!"
+/obj/item/surplus_voucher/com/attack_self(mob/user as mob)
+ spawn_item(get_turf(src))
+
+/obj/item/surplus_voucher/com/proc/spawn_item(var/turf/T)
+ var/path = pick(prob(6);/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,
+ prob(3);/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey,
+ prob(3);/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka,
+ prob(3);/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla,
+ prob(3);/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,
+ prob(3);/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager,
+ prob(3);/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth,
+ prob(3);/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac,
+ prob(3);/obj/item/weapon/reagent_containers/food/drinks/bottle/wine,
+ prob(3);/obj/item/weapon/spacecash/c50,
+ prob(3);/obj/item/weapon/spacecash/c100,
+ prob(3);/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger,
+ prob(3);/obj/item/weapon/reagent_containers/food/snacks/cheeseburger,
+ prob(3);/obj/item/weapon/reagent_containers/food/snacks/fries,
+ prob(2);/obj/item/pizzabox/meat,
+ prob(2);/obj/item/pizzabox/vegetable,
+ prob(1);/obj/item/pizzabox/pineapple,
+ prob(2);/obj/item/pizzabox/margherita,
+ prob(2);/obj/item/pizzabox/mushroom,
+ prob(3);/obj/item/toy/bouquet,
+ prob(5);/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,
+ prob(3);/obj/item/weapon/storage/box/snappops,
+ prob(2);/obj/item/clothing/under/syndicate/tacticool,
+ prob(3);/obj/item/clothing/head/cowboy_hat/small,
+ prob(3);/obj/item/toy/sword,
+ prob(3);/obj/item/toy/cultsword,
+ prob(1);/obj/structure/plushie/ian)
+ playsound(T, 'sound/effects/phasein.ogg', 25, 1)
+ new path(T)
+ del(src)
+
+/obj/item/surplus_voucher/eng
+ name = "Engineering Surplus Voucher"
+ desc = "A surplus voucher! This one is meant to resupply engineering with tools! Activate it for your surplus delivery!"
+/obj/item/surplus_voucher/eng/attack_self(mob/user as mob)
+ spawn_item(get_turf(src))
+
+/obj/item/surplus_voucher/eng/proc/spawn_item(var/turf/T)
+ var/path = pick(prob(2);/datum/design/item/powercell/high,
+ prob(2);/obj/item/weapon/storage/briefcase/inflatable,
+ prob(2);/obj/item/clamp,
+ prob(3);/obj/item/weapon/extinguisher,
+ prob(3);/obj/item/weapon/weldingtool/largetank,
+ prob(2);/obj/item/weapon/tool/wirecutters,
+ prob(3);/obj/item/weapon/tool/wrench,
+ prob(3);/obj/item/weapon/tool/screwdriver,
+ prob(3);/obj/item/device/analyzer,
+ prob(3);/obj/item/device/t_scanner,
+ prob(1);/obj/item/weapon/rms,
+ prob(1);/obj/item/weapon/rcd,
+ prob(3);/obj/item/weapon/rcd_ammo,
+ prob(2);/obj/item/weapon/grenade/chem_grenade/metalfoam,
+ prob(1);/obj/item/toy/figure/engineer)
+ playsound(T, 'sound/effects/phasein.ogg', 25, 1)
+ new path(T)
+ del(src)
+
+
+
+/obj/item/surplus_voucher/med
+ name = "Medical Surplus Voucher"
+ desc = "A surplus voucher! This one is meant to resupply medical with chemicals and kits! Activate it for your surplus delivery!"
+/obj/item/surplus_voucher/med/attack_self(mob/user as mob)
+ spawn_item(get_turf(src))
+
+/obj/item/surplus_voucher/med/proc/spawn_item(var/turf/T)
+ var/path = pick(prob(6);/obj/item/weapon/storage/firstaid/regular,
+ prob(6);/obj/item/weapon/storage/firstaid/fire,
+ prob(6);/obj/item/weapon/storage/firstaid/toxin,
+ prob(6);/obj/item/weapon/storage/firstaid/o2,
+ prob(6);/obj/item/weapon/storage/firstaid/adv,
+ prob(2);/obj/item/weapon/storage/firstaid/surgery,
+ prob(1);/obj/item/weapon/storage/firstaid/combat,
+ prob(3);/obj/item/weapon/storage/pill_bottle/antitox,
+ prob(3);/obj/item/weapon/storage/pill_bottle/bicaridine,
+ prob(2);/obj/item/weapon/storage/pill_bottle/dexalin_plus,
+ prob(3);/obj/item/weapon/storage/pill_bottle/dylovene,
+ prob(3);/obj/item/weapon/storage/pill_bottle/inaprovaline,
+ prob(3);/obj/item/weapon/storage/pill_bottle/kelotane,
+ prob(3);/obj/item/weapon/storage/pill_bottle/dermaline,
+ prob(3);/obj/item/weapon/storage/pill_bottle/spaceacillin,
+ prob(3);/obj/item/weapon/storage/pill_bottle/tramadol,
+ prob(3);/obj/item/weapon/storage/pill_bottle/carbon,
+ prob(3);/obj/item/weapon/storage/pill_bottle/iron,
+ prob(4);/obj/item/weapon/storage/pill_bottle/assorted,
+ prob(1);/obj/item/weapon/storage/pill_bottle/combat,
+ prob(4);/obj/item/weapon/backup_implanter,
+ prob(2);/obj/item/toy/plushie/borgplushie/medihound)
+ playsound(T, 'sound/effects/phasein.ogg', 25, 1)
+ new path(T)
+ del(src)
+
+/obj/item/surplus_voucher/sci
+ name = "Science Surplus Voucher"
+ desc = "A surplus voucher! This one is meant to supply science with a variety of miscellaneous items! Activate it for your surplus delivery!"
+/obj/item/surplus_voucher/sci/attack_self(mob/user as mob)
+ spawn_item(get_turf(src))
+
+/obj/item/surplus_voucher/sci/proc/spawn_item(var/turf/T)
+ var/path = pick(prob(1);/obj/item/device/kit/paint/ripley,
+ prob(1);/obj/item/device/kit/paint/ripley/death,
+ prob(1);/obj/item/device/kit/paint/ripley/flames_red,
+ prob(1);/obj/item/device/kit/paint/ripley/flames_blue,
+ prob(1);/obj/item/device/kit/paint/durand,
+ prob(1);/obj/item/device/kit/paint/gygax/darkgygax,
+ prob(3);/obj/item/weapon/reagent_containers/food/snacks/monkeycube,
+ prob(3);/obj/item/weapon/reagent_containers/food/snacks/monkeycube/sobakacube,
+ prob(3);/obj/item/weapon/reagent_containers/food/snacks/monkeycube/sarucube,
+ prob(3);/obj/item/weapon/reagent_containers/food/snacks/monkeycube/sparracube,
+ prob(3);/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wolpincube,
+ prob(2);/obj/item/weapon/storage/part_replacer,
+ prob(2);/obj/item/device/integrated_circuit_printer,
+ prob(1);/obj/item/weapon/disk/integrated_circuit/upgrade/advanced,
+ prob(3);/obj/item/stack/nanopaste,
+ prob(3);/obj/item/weapon/melee/baton/slime,
+ prob(3);/obj/item/weapon/gun/energy/taser/xeno,
+ prob(3);/obj/item/weapon/storage/box/monkeycubes,
+ prob(1);/obj/item/toy/figure/borg)
+ playsound(T, 'sound/effects/phasein.ogg', 25, 1)
+ new path(T)
+ del(src)
+
+/obj/item/surplus_voucher/sec
+ name = "Security Surplus Voucher"
+ desc = "A surplus voucher! This one is meant to resupply security with gear... and donuts! Activate it for your surplus delivery!"
+/obj/item/surplus_voucher/sec/attack_self(mob/user as mob)
+ spawn_item(get_turf(src))
+
+/obj/item/surplus_voucher/sec/proc/spawn_item(var/turf/T)
+ var/path = pick(prob(2);/obj/item/weapon/storage/box/flashbangs,
+ prob(1);/obj/item/weapon/storage/box/empslite,
+ prob(3);/obj/item/weapon/storage/box/smokes,
+ prob(2);/obj/item/weapon/storage/box/teargas,
+ prob(4);/obj/item/weapon/storage/box/flare,
+ prob(5);/obj/item/weapon/storage/box/donut,
+ prob(4);/obj/item/weapon/storage/box/handcuffs,
+ prob(3);/obj/item/weapon/reagent_containers/spray/pepper,
+ prob(2);/obj/item/weapon/gun/energy/taser,
+ prob(2);/obj/item/weapon/gun/energy/stunrevolver,
+ prob(3);/obj/item/weapon/melee/baton/loaded,
+ prob(2);/obj/item/weapon/storage/box/beanbags,
+ prob(2);/obj/item/weapon/storage/box/stunshells,
+ prob(2);/obj/item/ammo_magazine/m45/rubber,
+ prob(2);/obj/item/ammo_magazine/m9mmt/rubber,
+ prob(1);/obj/item/weapon/gun/projectile/colt/detective,
+ prob(1);/obj/item/weapon/gun/projectile/shotgun/pump,
+ prob(1);/obj/item/toy/plushie/borgplushie)
+ playsound(T, 'sound/effects/phasein.ogg', 25, 1)
+ new path(T)
+ del(src)
+
+/obj/item/surplus_voucher/ser
+ name = "Service Surplus Voucher"
+ desc = "A surplus voucher! This one is meant to generally resupply service employees! Activate it for your surplus delivery!"
+/obj/item/surplus_voucher/ser/attack_self(mob/user as mob)
+ spawn_item(get_turf(src))
+
+/obj/item/surplus_voucher/ser/proc/spawn_item(var/turf/T)
+ var/path = pick(prob(4);/obj/item/weapon/reagent_containers/food/drinks/milk,
+ prob(4);/obj/item/weapon/reagent_containers/food/condiment/flour,
+ prob(4);/obj/item/weapon/reagent_containers/food/drinks/soymilk,
+ prob(4);/obj/item/weapon/storage/fancy/egg_box,
+ prob(3);/obj/item/weapon/reagent_containers/food/snacks/meat,
+ prob(3);/obj/item/weapon/reagent_containers/spray/cleaner,
+ prob(2);/obj/item/weapon/grenade/chem_grenade/cleaner,
+ prob(1);/obj/item/weapon/storage/box/monkeycubes,
+ prob(3);/obj/item/weapon/reagent_containers/spray/plantbgone,
+ prob(2);/obj/item/seeds/sunflowerseed,
+ prob(2);/obj/item/seeds/cornseed,
+ prob(2);/obj/item/seeds/berryseed,
+ prob(2);/obj/item/seeds/wheatseed,
+ prob(2);/obj/item/seeds/orangeseed,
+ prob(1);/obj/item/toy/figure/bartender)
+ playsound(T, 'sound/effects/phasein.ogg', 25, 1)
+ new path(T)
+ del(src)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/taskmanager_ch.dm b/code/game/objects/items/weapons/taskmanager_ch.dm
new file mode 100644
index 0000000000..7aea6903af
--- /dev/null
+++ b/code/game/objects/items/weapons/taskmanager_ch.dm
@@ -0,0 +1,191 @@
+/obj/item/weapon/taskmanager
+ name = "Task Manager"
+ desc = "A high-tech tool used to pull surplus items from offsite storage. Select a department to begin! Has a five minute cooldown between successful uses"
+ icon = 'icons/mob/dogborg_vr.dmi'
+ icon_state = "taskmanager"
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/items/lefthand_vr.dmi',
+ slot_r_hand_str = 'icons/mob/items/righthand_vr.dmi',
+ )
+ force = 5
+ throwforce = 7
+ throw_speed = 1
+ throw_range = 3
+ w_class = ITEMSIZE_NORMAL
+ origin_tech = list(TECH_ENGINEERING = 3, TECH_MATERIAL = 3)
+ matter = list(DEFAULT_WALL_MATERIAL = 5000)
+ preserve_item = FALSE
+ var/scancount = 0
+ var/scanreq = 3
+ var/mode = 0
+ var/formatx1 = 0
+ var/formatx2 = 0
+ var/formatx3 = 0
+ var/format = ""
+ var/ready = 1
+ var/list/scannables = list()
+ var/list/scanned = list()
+ var/static/image/radial_image_bridge = image(icon = 'icons/mob/radial_ch.dmi', icon_state = "bridge")
+ var/static/image/radial_image_engineering = image(icon= 'icons/mob/radial_ch.dmi', icon_state = "eng")
+ var/static/image/radial_image_medical = image(icon = 'icons/mob/radial_ch.dmi', icon_state = "medbay")
+ var/static/image/radial_image_science = image(icon = 'icons/mob/radial_ch.dmi', icon_state = "sci")
+ var/static/image/radial_image_service = image(icon = 'icons/mob/radial_ch.dmi', icon_state = "bar")
+ var/static/image/radial_image_security = image(icon = 'icons/mob/radial_ch.dmi', icon_state = "armory")
+
+/obj/item/weapon/taskmanager/proc/check_menu(mob/living/user)
+ if(!istype(user))
+ return FALSE
+ if(user.incapacitated() || !user.Adjacent(src))
+ return FALSE
+ return TRUE
+
+
+/obj/item/weapon/taskmanager/attack_self(mob/user)
+ var/list/choices = list(
+ "Bridge" = radial_image_bridge,
+ "Engineering" = radial_image_engineering,
+ "Medical" = radial_image_medical,
+ "Science" = radial_image_science,
+ "Service" = radial_image_service,
+ "Security" = radial_image_security
+ )
+
+ var/choice = show_radial_menu(user, src, choices, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
+ if(!check_menu(user))
+ return
+ switch(choice)
+ if("Bridge")
+ mode = 1
+ scancount = 0
+ scanned = list()
+ scannables = list(/mob/living/simple_mob/animal/passive/dog/corgi/Ian,/obj/machinery/photocopier,/obj/machinery/papershredder,/obj/item/weapon/pen/multi,
+ /obj/structure/filingcabinet/chestdrawer,/obj/item/weapon/folder/blue,/obj/item/weapon/folder/red,/obj/machinery/computer/communications,
+ /obj/machinery/photocopier/faxmachine,/obj/item/weapon/hand_labeler,/obj/item/device/megaphone,/obj/item/device/taperecorder,/obj/item/weapon/melee/chainofcommand,
+ /obj/item/weapon/hand_tele,/obj/item/weapon/stamp/captain,/obj/item/weapon/stamp/denied)
+ if("Engineering")
+ mode = 2
+ scancount = 0
+ scanned = list()
+ scannables = list(/obj/item/weapon/book/manual/supermatter_engine,/obj/machinery/computer/security/engineering,/obj/item/weapon/rcd,/obj/item/weapon/stamp/ce,
+ /obj/item/weapon/folder/yellow_ce,/obj/item/clothing/glasses/meson,/obj/item/weapon/tape_roll,/obj/machinery/computer/power_monitor,/obj/machinery/computer/rcon,
+ /obj/machinery/computer/atmos_alert,/obj/machinery/pipedispenser,/obj/machinery/pipedispenser/disposal,/obj/item/clothing/head/welding,/obj/item/clothing/glasses/welding,
+ /obj/machinery/vending/tool,/obj/machinery/vending/engivend,/obj/structure/reagent_dispensers/fueltank,/obj/structure/reagent_dispensers/watertank)
+ if("Medical")
+ mode = 3
+ scancount = 0
+ scanned = list()
+ scannables = list(/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/device/sleevemate,/obj/item/device/defib_kit/loaded,/obj/item/organ/internal/lungs/erikLungs,
+ /obj/machinery/reagentgrinder,/obj/machinery/chem_master,/obj/machinery/chemical_dispenser/full,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker,
+ /obj/item/device/mass_spectrometer/adv,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/toxin,
+ /obj/item/weapon/storage/firstaid/fire,/obj/machinery/vending/medical,/obj/item/roller,/obj/machinery/vending/blood,/obj/machinery/atmospherics/unary/cryo_cell,
+ /obj/machinery/clonepod/transhuman/full,/obj/machinery/body_scanconsole,/obj/machinery/sleep_console)
+ if("Science")
+ mode = 4
+ scancount = 0
+ scanned = list()
+ scannables = list(/obj/machinery/pros_fabricator,/obj/machinery/mecha_part_fabricator,/obj/machinery/autolathe,/obj/machinery/computer/rdconsole/robotics,
+ /obj/machinery/r_n_d/circuit_imprinter,/obj/machinery/r_n_d/destructive_analyzer,/obj/machinery/computer/rdconsole/core,/obj/machinery/r_n_d/protolathe,
+ /mob/living/simple_mob/slime/xenobio/rainbow/kendrick,/obj/machinery/computer/rdservercontrol,/obj/machinery/r_n_d/server/core,/obj/machinery/r_n_d/server/robotics,
+ /obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/gun/energy/taser/xeno,/obj/item/weapon/melee/baton/slime/loaded,/obj/item/device/slime_scanner,
+ /obj/machinery/processor)
+ if("Service")
+ mode = 5
+ scancount = 0
+ scanned = list()
+ scannables = list(/obj/machinery/holosign/bar,/obj/item/weapon/material/kitchen/utensil/spoon,/obj/item/weapon/material/kitchen/utensil/fork,
+ /mob/living/carbon/human/monkey/punpun,/obj/machinery/chemical_dispenser/bar_alc/full,/obj/machinery/chemical_dispenser/bar_soft/full,/obj/machinery/smartfridge/drinks,
+ /obj/machinery/vending/boozeomat,/obj/machinery/media/jukebox,/obj/machinery/chem_master/condimaster,/obj/machinery/microwave,/obj/machinery/cooker/cereal,
+ /obj/machinery/cooker/candy,/obj/machinery/vending/dinnerware,/obj/structure/closet/secure_closet/freezer/meat,/obj/structure/closet/secure_closet/freezer/fridge,
+ /obj/machinery/cooker/fryer,/obj/machinery/cooker/grill,/obj/machinery/cooker/oven,/obj/machinery/icecream_vat,/obj/machinery/gibber,/obj/structure/kitchenspike,
+ /obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/vending/hydronutrients,/obj/machinery/seed_storage/garden,/obj/machinery/honey_extractor,
+ /obj/machinery/biogenerator,/obj/machinery/seed_extractor)
+ if("Security")
+ mode = 6
+ scancount = 0
+ scanned = list()
+ scannables = list(/obj/machinery/deployable/barrier,/obj/machinery/flasher/portable,/obj/item/weapon/storage/box/flashbangs,/obj/item/device/taperecorder,
+ /mob/living/simple_mob/animal/passive/snake/noodle,/obj/item/weapon/gun/energy/taser,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/reagent_containers/spray/pepper,
+ /obj/item/weapon/storage/box/handcuffs,/obj/item/clothing/glasses/sunglasses/sechud/aviator,/obj/machinery/computer/secure_data,/obj/machinery/computer/security,
+ /obj/item/weapon/storage/briefcase/crimekit,/obj/machinery/microscope,/obj/machinery/dnaforensics,/obj/machinery/flasher,/obj/structure/closet/secure_closet/brig,
+ /obj/structure/closet/secure_closet/warden,/obj/machinery/vending/security,/obj/structure/closet/secure_closet/hos2,/obj/structure/closet/secure_closet/hos,
+ /obj/item/weapon/stamp/hos,/obj/structure/closet/secure_closet/security)
+ else
+ return
+
+ scanreq = rand(3,9)
+ to_chat(user, span("notice", "Changed mode to '[choice]'."))
+ playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
+ return ..()
+
+
+
+/obj/item/weapon/taskmanager/afterattack(atom/target, mob/user, proximity)
+ if(!proximity)
+ return
+ if(!ready)
+ to_chat(user, "The Task Manager is still recharging!")
+ return
+ if(mode == 0)
+ to_chat(user, "You must choose a department first!")
+ return
+ if((target.type in scannables) && scancount < scanreq && !(target.type in scanned))
+ scancount = scancount + 1
+ scanned.Add(target.type)
+ var/scansleft = scanreq - scancount
+ playsound(src, 'sound/machines/beep.ogg', 50)
+ to_chat(user, "You must scan [scansleft] more department objects!")
+ if (scancount == scanreq)
+ formatx1 = rand(1,5)
+ formatx2 = rand(0,80)
+ formatx3 = rand(1,6)
+ format = "Greetings supervisors,
I have detected [formatx1] infractions in this department alone.
Scans indicate that this department is functioning at [formatx2]% capacity.
Additional supplies are requested, priority level [formatx3]
I await your delivery"
+ to_chat(user, "Scans complete! [formatx1] infractions detected, department at [formatx2]% capacity, alert level [formatx3]")
+ to_chat(user, "Please write down the following form on a paper, and replace all X's with the appopriate number. Do NOT change anything but the X's")
+ to_chat(user, "Greetings supervisors,
I have detected X infractions in this department alone.
Scans indicate that this department is functioning at X% capacity.
Additional supplies are requested, priority level X
I await your delivery")
+ return
+ if(istype(target,/obj/item/weapon/paper) && scancount == scanreq)
+ scan_paper(user,target)
+ return
+ else
+ to_chat(user, "The Task Manager can't scan this!")
+ return
+
+/obj/item/weapon/taskmanager/proc/scan_paper(user,paper)
+ var/obj/item/weapon/paper/P = paper
+ if(findtext(P.info,format))
+ deploy_voucher(get_turf(src))
+ scancount = 0
+ scanned = list()
+ del(P)
+ to_chat(user, "Format accepted, printing voucher!")
+ ready = 0
+ spawn(30 SECONDS)
+ ready = 1
+ return
+ if(!findtext(P.info,format))
+ to_chat(user, "Incorrect format!")
+ return
+ else
+ to_chat(user, "If you are reading this, something has gone horribly wrong!")
+ return
+
+/obj/item/weapon/taskmanager/proc/deploy_voucher(var/turf/T)
+ switch(mode)
+ if (1)
+ new /obj/item/surplus_voucher/com(T)
+ playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
+ if (2)
+ new /obj/item/surplus_voucher/eng(T)
+ playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
+ if (3)
+ new /obj/item/surplus_voucher/med(T)
+ playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
+ if (4)
+ new /obj/item/surplus_voucher/sci(T)
+ playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
+ if (5)
+ new /obj/item/surplus_voucher/ser(T)
+ playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
+ if (6)
+ new /obj/item/surplus_voucher/sec(T)
+ playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
diff --git a/code/global_vr.dm b/code/global_vr.dm
index 0db457da75..3b7ea08384 100644
--- a/code/global_vr.dm
+++ b/code/global_vr.dm
@@ -7,6 +7,7 @@
robot_module_types += "Service-Hound"
robot_module_types += "KMine"
robot_module_types += "BoozeHound" //YW changes
+ robot_module_types += "UnityHound" // CH changes
return 1
/* //ChompStation Removal
var/list/shell_module_types = list(
diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
index ae59e957b6..4a07efa00a 100644
--- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
+++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm
@@ -698,12 +698,20 @@
icon_state = "brewer"
injection_chems = null
max_item_count = 1
-
+
/obj/item/device/dogborg/sleeper/compactor/supply //Miner borg belly
name = "Supply Satchel"
desc = "A mounted survival unit with fuel processor."
icon_state = "sleeperc"
injection_chems = list("glucose","inaprovaline","tricordrazine")
max_item_count = 1
+/obj/item/device/dogborg/sleeper/command //Command borg belly // CH addition
+ name = "Bluespace Filing Belly"
+ desc = "A mounted bluespace storage unit for carrying paperwork"
+ icon_state = "sleeperd"
+ injection_chems = null
+ compactor = TRUE
+ recycles = FALSE
+ max_item_count = 25
#undef SLEEPER_INJECT_COST
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
index c986456a0d..9f13ab2a47 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
@@ -37,6 +37,26 @@
LANGUAGE_ENOCHIAN = 1
)
+/obj/item/weapon/robot_module/robot/chound
+ languages = list(
+ LANGUAGE_SOL_COMMON = 1,
+ LANGUAGE_TRADEBAND = 1,
+ LANGUAGE_UNATHI = 1,
+ LANGUAGE_SIIK = 1,
+ LANGUAGE_SKRELLIAN = 1,
+ LANGUAGE_ROOTLOCAL = 0,
+ LANGUAGE_GUTTER = 1,
+ LANGUAGE_SCHECHI = 1,
+ LANGUAGE_EAL = 1,
+ LANGUAGE_SIGN = 0,
+ LANGUAGE_BIRDSONG = 1,
+ LANGUAGE_SAGARU = 1,
+ LANGUAGE_CANILUNZT = 1,
+ LANGUAGE_ECUREUILIAN= 1,
+ LANGUAGE_DAEMON = 1,
+ LANGUAGE_ENOCHIAN = 1
+ )
+
/hook/startup/proc/robot_modules_vr()
robot_modules["Medihound"] = /obj/item/weapon/robot_module/robot/medihound
robot_modules["K9"] = /obj/item/weapon/robot_module/robot/knine
@@ -48,6 +68,7 @@
robot_modules["Service-Hound"] = /obj/item/weapon/robot_module/robot/clerical/brodog
robot_modules["KMine"] = /obj/item/weapon/robot_module/robot/kmine
robot_modules["BoozeHound"] = /obj/item/weapon/robot_module/robot/booze //YW Addition booze
+ robot_modules["UnityHound"] = /obj/item/weapon/robot_module/robot/chound //CH Addition Unity
return 1
//Just add a new proc with the robot_module type if you wish to run some other vore code
@@ -262,7 +283,7 @@
var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(2000)
synths += medicine
-
+
var/obj/item/stack/medical/advanced/clotting/C = new (src)
C.uses_charge = 1
C.charge_costs = list(1000)
@@ -987,3 +1008,81 @@
B.reagents.add_reagent("beer2", 2 * amount)
// YW Changes - Boozeborg end
+
+// CH Changes - Unity Hound begin
+/obj/item/weapon/robot_module/robot/chound
+ name = "Unity Hound Module"
+ sprites = list(
+ "Kcom" = "kcom"
+ )
+ channels = list(
+ "Medical" = 1,
+ "Engineering" = 1,
+ "Security" = 1,
+ "Service" = 1,
+ "Supply" = 0,
+ "Science" = 1,
+ "Command" = 1,
+ "Explorer" = 0
+ )
+ pto_type = PTO_CIVILIAN
+ can_be_pushed = 0
+
+/obj/item/weapon/robot_module/robot/chound/New(var/mob/living/silicon/robot/R)
+ src.modules += new /obj/item/weapon/pen/robopen(src)
+ src.modules += new /obj/item/weapon/form_printer(src)
+ src.modules += new /obj/item/weapon/gripper/paperwork(src)
+ src.modules += new /obj/item/weapon/hand_labeler(src)
+ src.modules += new /obj/item/weapon/stamp(src)
+ src.modules += new /obj/item/weapon/stamp/denied(src)
+ src.modules += new /obj/item/weapon/taskmanager(src)
+ src.emag = new /obj/item/weapon/stamp/chameleon(src)
+ src.emag = new /obj/item/weapon/pen/chameleon(src)
+
+ var/datum/matter_synth/water = new /datum/matter_synth(500)
+ water.name = "Water reserves"
+ water.recharge_rate = 0
+ R.water_res = water
+ synths += water
+
+ var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src)
+ T.water = water
+ src.modules += T
+
+ var/obj/item/device/dogborg/sleeper/B = new /obj/item/device/dogborg/sleeper/command(src)
+ B.water = water
+ src.modules += B
+
+ R.icon = 'icons/mob/widerobot_ch.dmi'
+ R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
+ R.ui_style_vr = TRUE
+ R.pixel_x = -16
+ R.old_x = -16
+ R.default_pixel_x = -16
+ R.dogborg = TRUE
+ R.wideborg = TRUE
+ R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
+ R.verbs |= /mob/living/silicon/robot/proc/robot_mount
+ R.verbs |= /mob/living/proc/toggle_rider_reins
+ R.verbs |= /mob/living/proc/shred_limb
+ R.verbs |= /mob/living/silicon/robot/proc/rest_style
+
+ ..()
+
+/obj/item/weapon/robot_module/Reset(var/mob/living/silicon/robot/R)
+ R.pixel_x = initial(pixel_x)
+ R.pixel_y = initial(pixel_y)
+ R.icon = initial(R.icon)
+ R.dogborg = FALSE
+ R.wideborg = FALSE
+ R.ui_style_vr = FALSE
+ R.default_pixel_x = initial(pixel_x)
+ R.scrubbing = FALSE
+ R.verbs -= /mob/living/silicon/robot/proc/ex_reserve_refill
+ R.verbs -= /mob/living/silicon/robot/proc/robot_mount
+ R.verbs -= /mob/living/proc/toggle_rider_reins
+ R.verbs -= /mob/living/proc/shred_limb
+ R.verbs -= /mob/living/silicon/robot/proc/rest_style
+ ..()
+// CH changes - Unity Hound end
+
diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm
index 1959dd6466..b8bb793f77 100644
--- a/code/modules/paperwork/faxmachine.dm
+++ b/code/modules/paperwork/faxmachine.dm
@@ -33,7 +33,11 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
/obj/machinery/photocopier/faxmachine/attack_hand(mob/user as mob)
user.set_machine(src)
- ui_interact(user)
+ if(issilicon(usr))
+ authenticated = 1
+ ui_interact(user)
+ else
+ ui_interact(user)
/**
* Display the NanoUI window for the fax machine.
diff --git a/icons/mob/dogborg_vr.dmi b/icons/mob/dogborg_vr.dmi
index 4bf56f830a..bc50551508 100644
Binary files a/icons/mob/dogborg_vr.dmi and b/icons/mob/dogborg_vr.dmi differ
diff --git a/icons/mob/radial_ch.dmi b/icons/mob/radial_ch.dmi
new file mode 100644
index 0000000000..cc069847b0
Binary files /dev/null and b/icons/mob/radial_ch.dmi differ
diff --git a/icons/mob/widerobot_ch.dmi b/icons/mob/widerobot_ch.dmi
index 883f8a4b2f..2fe76523cb 100644
Binary files a/icons/mob/widerobot_ch.dmi and b/icons/mob/widerobot_ch.dmi differ