diff --git a/code/datums/supplypacks/recreation.dm b/code/datums/supplypacks/recreation.dm
index ba6a33d48c..40caa4c405 100644
--- a/code/datums/supplypacks/recreation.dm
+++ b/code/datums/supplypacks/recreation.dm
@@ -35,6 +35,15 @@
containertype = /obj/structure/closet/crate/allico
containername = "foam weapon crate"
+/datum/supply_pack/recreation/donksoftborg
+ name = "Donk-Soft Cyborg Blaster Crate"
+ contains = list(
+ /obj/item/borg/upgrade/toygun = 2,
+ )
+ cost = 35
+ containertype = /obj/structure/closet/crate/allico
+ containername = "foam weapon crate"
+
/datum/supply_pack/recreation/donksoftvend
name = "Donk-Soft Vendor Crate"
contains = list()
diff --git a/code/game/objects/items/robot/robot_upgrades_vr.dm b/code/game/objects/items/robot/robot_upgrades_vr.dm
index bd9f247ec7..499d535a5c 100644
--- a/code/game/objects/items/robot/robot_upgrades_vr.dm
+++ b/code/game/objects/items/robot/robot_upgrades_vr.dm
@@ -31,6 +31,30 @@
R.verbs += /mob/living/proc/set_size
return 1
+//Robot size gun
+/obj/item/borg/upgrade/sizegun
+ name = "robot mounted size gun"
+ desc = "A size gun adapted for installation in cyborgs, allows them to turn people pocket-sized among other uses. What could go wrong?"
+ icon_state = "cyborg_upgrade2"
+ item_state = "cyborg_upgrade"
+ require_module = 1
+
+/obj/item/borg/upgrade/sizegun/action(var/mob/living/silicon/robot/R)
+ if(..()) return 0
+
+ var/obj/item/weapon/gun/energy/sizegun/mounted/T = locate() in R.module
+ if(!T)
+ T = locate() in R.module.contents
+ if(!T)
+ T = locate() in R.module.modules
+ if(!T)
+ R.module.modules += new/obj/item/weapon/gun/energy/sizegun/mounted(R.module)
+ return 1
+ if(T)
+ to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
+ to_chat(usr, "There's no mounting point for the module!")
+ return 0
+
/obj/item/borg/upgrade/bellysizeupgrade
name = "robohound capacity expansion module"
desc = "Used to double a robohound's belly capacity. This only affects total volume, and won't allow support of more than one patient in case of sleeper bellies. Can only be applied once."
@@ -152,6 +176,30 @@
if(!T)
R.module.modules += new/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg(R.module)
return 1
+ if(T)
+ to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
+ to_chat(usr, "There's no mounting point for the module!")
+ return 0
+
+//cyborg foam dart gun
+/obj/item/borg/upgrade/toygun
+ name = "Donk-Soft Cyborg Blaster module" //Cyborg Blaster is capitalized because it's the brand name
+ desc = "A foam dart gun designed for mounting into cyborgs. It's Donk or Don't! DISCLAIMER: Donk-Soft bears no responsibility for incidents relating to cyborgs becoming too accustomed to shooting at crew. Installation of the Donk-Soft Cyborg Blaster must be performed only by a licensed roboticist."
+ icon_state = "cyborg_upgrade5"
+ item_state = "cyborg_upgrade"
+ require_module = 1
+
+/obj/item/borg/upgrade/toygun/action(var/mob/living/silicon/robot/R)
+ if(..()) return 0
+
+ var/obj/item/weapon/gun/projectile/cyborgtoy/T = locate() in R.module
+ if(!T)
+ T = locate() in R.module.contents
+ if(!T)
+ T = locate() in R.module.modules
+ if(!T)
+ R.module.modules += new/obj/item/weapon/gun/projectile/cyborgtoy(R.module)
+ return 1
if(T)
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
to_chat(usr, "There's no mounting point for the module!")
diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm
index 2d31539403..b6791ccf0d 100644
--- a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm
@@ -44,6 +44,10 @@
display_name = "collar, cowbell"
path = /obj/item/clothing/accessory/collar/cowbell
+/datum/gear/collar/planet_earth
+ display_name = "collar, planet"
+ path = /obj/item/clothing/accessory/collar/collarplanet_earth
+
/datum/gear/collar/holo
display_name = "collar, holo"
path = /obj/item/clothing/accessory/collar/holo
diff --git a/code/modules/clothing/under/accessories/accessory_vr.dm b/code/modules/clothing/under/accessories/accessory_vr.dm
index afcccabe3e..33d8045f38 100644
--- a/code/modules/clothing/under/accessories/accessory_vr.dm
+++ b/code/modules/clothing/under/accessories/accessory_vr.dm
@@ -291,7 +291,7 @@
/obj/item/clothing/accessory/collar/collarplanet_earth
name = "planet collar"
- desc = "A collar featuring a surprisingly detailed replica of a earth-like planet surrounded by a weak battery powered force shield. There is a button to turn it off."
+ desc = "A collar featuring a surprisingly detailed replica of planet earth surrounded by a weak battery powered force shield. There is a button to turn it off."
icon_state = "collarplanet_earth"
item_state = "collarplanet_earth"
overlay_state = "collarplanet_earth"
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 980057eb52..14e2f452ac 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -485,9 +485,6 @@
return istype(H.glasses, /obj/item/clothing/glasses/hud/health)
else if(istype(M, /mob/living/silicon/robot))
var/mob/living/silicon/robot/R = M
- switch(hudtype)
- if("security")
- return R.hudmode == "Security"
- if("medical")
- return R.hudmode == "Medical"
+ return R.sensor_type //VOREStation Add - Borgo sensors are now binary so just have them on or off
+
return 0
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index a2876c61aa..dd3fc5f064 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -787,9 +787,11 @@ var/list/ai_verbs_default = list(
src.aiRadio.interact(src)
/mob/living/silicon/ai/proc/sensor_mode()
- set name = "Set Sensor Augmentation"
+ set name = "Toggle Sensor Augmentation" //VOREStation Add
set category = "AI Settings"
set desc = "Augment visual feed with internal sensor overlays"
+ sensor_type = !sensor_type //VOREStation Add
+ to_chat(usr, "You [sensor_type ? "enable" : "disable"] your sensors.") //VOREStation Add
toggle_sensor_mode()
/mob/living/silicon/ai/proc/toggle_hologram_movement()
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index 291717f37b..71b84648d5 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -21,8 +21,9 @@
/obj/item/weapon/tank,
/obj/item/weapon/circuitboard,
/obj/item/weapon/smes_coil,
- /obj/item/weapon/fuel_assembly
- )
+ /obj/item/weapon/fuel_assembly,
+ /obj/item/weapon/ore/bluespace_crystal
+ ) // CHOMPEdit - Buffing the gripper to allow bluespace crystal use for telesci building.
var/obj/item/wrapped = null // Item currently being held.
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index c5036fcc35..4ddfdd608f 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -1079,9 +1079,11 @@
to_chat(src, "Your icon has been set. You now require a module reset to change it.")
/mob/living/silicon/robot/proc/sensor_mode() //Medical/Security HUD controller for borgs
- set name = "Set Sensor Augmentation"
+ set name = "Toggle Sensor Augmentation" //VOREStation Add
set category = "Robot Commands"
set desc = "Augment visual feed with internal sensor overlays."
+ sensor_type = !sensor_type //VOREStation Add
+ to_chat(usr, "You [sensor_type ? "enable" : "disable"] your sensors.") //VOREStation Add
toggle_sensor_mode()
/mob/living/silicon/robot/proc/add_robot_verbs()
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
index 8e9c36d450..e676c871c4 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
@@ -340,6 +340,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/gripper/no_use/organ(src)
src.modules += new /obj/item/weapon/gripper/medical(src)
src.modules += new /obj/item/weapon/shockpaddles/robot(src)
+ src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) //VOREStation Add - This is kinda important for rescuing people without making it worse for everyone
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
src.modules += new /obj/item/device/sleevemate(src)
src.emag.reagents.add_reagent("pacid", 250)
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 147c289b73..50d907c913 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
@@ -300,6 +300,7 @@
src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)//For holding the chemicals when the chemist is nice
src.modules += new /obj/item/device/sleevemate(src) //Lets them scan people.
src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src) //Paws of life
+ src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) //This is kinda important for rescuing people without making it worse for everyone
src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce
src.modules += new /obj/item/weapon/gripper/medical(src)//Now you can set up cyro or make peri. //CHOMPEdit
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 56b042e363..7caad30448 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -25,6 +25,8 @@
var/obj/item/weapon/card/id/idcard
var/idcard_type = /obj/item/weapon/card/id/synthetic
+ var/sensor_type = 0 //VOREStation add - silicon omni "is sensor on or nah"
+
var/hudmode = null
/mob/living/silicon/New()
@@ -221,52 +223,36 @@
var/synth = (L in speech_synthesizer_langs)
. += "[L.name] ([get_language_prefix()][L.key])[synth ? default_str : null]
Speech Synthesizer: [synth ? "YES" : "NOT SUPPORTED"]
[L.desc]
"
-/mob/living/silicon/proc/toggle_sensor_mode()
- var/sensor_type = tgui_input_list(usr, "Please select sensor type.", "Sensor Integration", list("Security","Medical","Disable"))
- switch(sensor_type)
- if ("Security")
- if(plane_holder)
- //Enable Security planes
- plane_holder.set_vis(VIS_CH_ID,TRUE)
- plane_holder.set_vis(VIS_CH_WANTED,TRUE)
- plane_holder.set_vis(VIS_CH_IMPLOYAL,TRUE)
- plane_holder.set_vis(VIS_CH_IMPTRACK,TRUE)
- plane_holder.set_vis(VIS_CH_IMPCHEM,TRUE)
+/mob/living/silicon/proc/toggle_sensor_mode() //VOREStation Add to make borgs use omni starts here - Tank, clueless bird
+ if(sensor_type)
+ if(plane_holder)
+ //Enable the planes, its basically just AR-Bs
+ plane_holder.set_vis(VIS_CH_ID,TRUE)
+ plane_holder.set_vis(VIS_CH_WANTED,TRUE)
+ plane_holder.set_vis(VIS_CH_IMPLOYAL,TRUE) //antag related so prob not useful but leaving them in
+ plane_holder.set_vis(VIS_CH_IMPTRACK,TRUE)
+ plane_holder.set_vis(VIS_CH_IMPCHEM,TRUE)
+ plane_holder.set_vis(VIS_CH_STATUS_R,TRUE)
+ plane_holder.set_vis(VIS_CH_HEALTH_VR,TRUE)
+ plane_holder.set_vis(VIS_CH_BACKUP,TRUE) //backup stuff from silicon_vr is here now
+ return TRUE
- //Disable Medical planes
- plane_holder.set_vis(VIS_CH_STATUS,FALSE)
- plane_holder.set_vis(VIS_CH_HEALTH,FALSE)
+ else
+ if(plane_holder)
+ //Disable the planes
+ plane_holder.set_vis(VIS_CH_ID,FALSE)
+ plane_holder.set_vis(VIS_CH_WANTED,FALSE)
+ plane_holder.set_vis(VIS_CH_IMPLOYAL,FALSE)
+ plane_holder.set_vis(VIS_CH_IMPTRACK,FALSE)
+ plane_holder.set_vis(VIS_CH_IMPCHEM,FALSE)
+ plane_holder.set_vis(VIS_CH_STATUS_R,FALSE)
+ plane_holder.set_vis(VIS_CH_HEALTH_VR,FALSE)
+ plane_holder.set_vis(VIS_CH_BACKUP,FALSE)
+ return FALSE
- to_chat(src, "Security records overlay enabled.")
- if ("Medical")
- if(plane_holder)
- //Disable Security planes
- plane_holder.set_vis(VIS_CH_ID,FALSE)
- plane_holder.set_vis(VIS_CH_WANTED,FALSE)
- plane_holder.set_vis(VIS_CH_IMPLOYAL,FALSE)
- plane_holder.set_vis(VIS_CH_IMPTRACK,FALSE)
- plane_holder.set_vis(VIS_CH_IMPCHEM,FALSE)
-
- //Enable Medical planes
- plane_holder.set_vis(VIS_CH_STATUS,TRUE)
- plane_holder.set_vis(VIS_CH_HEALTH,TRUE)
-
- to_chat(src, "Life signs monitor overlay enabled.")
- if ("Disable")
- if(plane_holder)
- //Disable Security planes
- plane_holder.set_vis(VIS_CH_ID,FALSE)
- plane_holder.set_vis(VIS_CH_WANTED,FALSE)
- plane_holder.set_vis(VIS_CH_IMPLOYAL,FALSE)
- plane_holder.set_vis(VIS_CH_IMPTRACK,FALSE)
- plane_holder.set_vis(VIS_CH_IMPCHEM,FALSE)
-
- //Disable Medical planes
- plane_holder.set_vis(VIS_CH_STATUS,FALSE)
- plane_holder.set_vis(VIS_CH_HEALTH,FALSE)
- to_chat(src, "Sensor augmentations disabled.")
-
- hudmode = sensor_type //This is checked in examine.dm on humans, so they can see medical/security records depending on mode
+//hudmode = sensor_type //This is checked in examine.dm on humans, so they can see medical/security records depending on mode
+//I made it work like omnis with records by adding stuff to examine.dm
+//VOREStation Add ends here
/mob/living/silicon/verb/pose()
set name = "Set Pose"
diff --git a/code/modules/mob/living/silicon/silicon_vr.dm b/code/modules/mob/living/silicon/silicon_vr.dm
index 168b3facab..73a25dbd76 100644
--- a/code/modules/mob/living/silicon/silicon_vr.dm
+++ b/code/modules/mob/living/silicon/silicon_vr.dm
@@ -4,18 +4,18 @@
return 1
return ..()
-// For handling any custom visibility in borgo sensor modes, like sleeve implants
-/mob/living/silicon/toggle_sensor_mode()
- . = ..()
- switch(hudmode) // This is set in parent
- if ("Security")
- //Disable Medical planes
- plane_holder?.set_vis(VIS_CH_BACKUP,FALSE)
-
- if ("Medical")
- //Enable Medical planes
- plane_holder?.set_vis(VIS_CH_BACKUP,TRUE)
-
- if ("Disable")
- //Disable Medical planes
- plane_holder?.set_vis(VIS_CH_BACKUP,FALSE)
+// For handling any custom visibility in borgo sensor modes, like sleeve implants - not needed anymore but leaving anyways - Tank
+///mob/living/silicon/toggle_sensor_mode()
+// . = ..()
+// switch(hudmode) // This is set in parent
+// if ("Security")
+// //Disable Medical planes
+// plane_holder?.set_vis(VIS_CH_BACKUP,FALSE)
+//
+// if ("Medical")
+// //Enable Medical planes
+// plane_holder?.set_vis(VIS_CH_BACKUP,TRUE)
+//
+// if ("Disable")
+// //Disable Medical planes
+// plane_holder?.set_vis(VIS_CH_BACKUP,FALSE)
diff --git a/code/modules/projectiles/guns/toy.dm b/code/modules/projectiles/guns/toy.dm
index 680057dcd4..a2d75685d8 100644
--- a/code/modules/projectiles/guns/toy.dm
+++ b/code/modules/projectiles/guns/toy.dm
@@ -199,7 +199,52 @@
icon_state = initial(icon_state)
else
icon_state = "[initial(icon_state)]-e"
+/*
+ * Cyborg
+ */
+/obj/item/weapon/gun/projectile/cyborgtoy
+ name = "\improper Donk-Soft Cyborg Blaster"
+ desc = "Donk-Soft Cyborg Blaster! It's Donk or Don't! Adult supervision required. Use to toggle between battle and cleanup mode."
+ icon = 'icons/obj/gun_toy.dmi'
+ icon_state = "smg"
+ caliber = "foam"
+ load_method = SINGLE_CASING
+ max_shells = 15
+ var/cleanup = 0
+ ammo_type = /obj/item/ammo_casing/afoam_dart
+ projectile_type = /obj/item/projectile/bullet/foam_dart
+ recoil = null
+ handle_casings = null
+/obj/item/weapon/gun/projectile/cyborgtoy/attack_self(var/mob/user)
+ cleanup = !cleanup
+ to_chat(user, "The [src] is now on [cleanup ? "cleanup" : "battle"] mode.")
+
+/obj/item/weapon/gun/projectile/cyborgtoy/afterattack(atom/A, mob/living/user, adjacent, params)
+ if(cleanup)
+ if(!adjacent)
+ return 0
+ collectammo(A, user)
+ return 0
+ ..()
+
+/obj/item/weapon/gun/projectile/cyborgtoy/proc/collectammo(atom/A, user)
+ if(loaded.len >= max_shells)
+ to_chat(user, "The [src] is at max capacity.")
+ return
+ var/T = get_turf(A)
+ var/success = 0
+ for(var/obj/item/ammo_casing/afoam_dart/D in T)
+ if(loaded.len >= max_shells)
+ break
+ D.loc = src
+ loaded.Insert(1, D)
+ success = 1
+ if(success)
+ playsound(src, 'sound/machines/hiss.ogg', 50, 0)
+ to_chat(user, "The [src] vacuums in the darts!")
+ else
+ to_chat(user, "No Donk-Soft brand foam darts detected. Aborting.")
/*
* Laser Tag
*/
diff --git a/code/modules/research/prosfab_designs_vr.dm b/code/modules/research/prosfab_designs_vr.dm
index bb15c848f8..8275a456c9 100644
--- a/code/modules/research/prosfab_designs_vr.dm
+++ b/code/modules/research/prosfab_designs_vr.dm
@@ -7,6 +7,13 @@
materials = list(MAT_STEEL = 4000, MAT_GLASS = 4000)
build_path = /obj/item/borg/upgrade/sizeshift
+/datum/design/item/prosfab/robot_upgrade/sizegun
+ name = "Size Gun Module"
+ id = "borg_sizegun_module"
+ req_tech = list(TECH_COMBAT = 3, TECH_BLUESPACE = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
+ materials = list(MAT_STEEL = 6000, MAT_GLASS = 4000)
+ build_path = /obj/item/borg/upgrade/sizegun
+
/datum/design/item/prosfab/robot_upgrade/bellysizeupgrade
name = "Robohound Capacity Expansion Module"
id = "borg_hound_capacity_module"
diff --git a/icons/inventory/accessory/item_vr.dmi b/icons/inventory/accessory/item_vr.dmi
index 09e8425850..b1e6a60a0e 100644
Binary files a/icons/inventory/accessory/item_vr.dmi and b/icons/inventory/accessory/item_vr.dmi differ
diff --git a/icons/inventory/accessory/mob_vr.dmi b/icons/inventory/accessory/mob_vr.dmi
index 7327c9b136..cab7916a32 100644
Binary files a/icons/inventory/accessory/mob_vr.dmi and b/icons/inventory/accessory/mob_vr.dmi differ
diff --git a/icons/mob/taursuits_horse.dmi b/icons/mob/taursuits_horse.dmi
index b8901590ec..192f282796 100644
Binary files a/icons/mob/taursuits_horse.dmi and b/icons/mob/taursuits_horse.dmi differ
diff --git a/icons/mob/taursuits_horse_vr.dmi b/icons/mob/taursuits_horse_vr.dmi
index b8901590ec..192f282796 100644
Binary files a/icons/mob/taursuits_horse_vr.dmi and b/icons/mob/taursuits_horse_vr.dmi differ
diff --git a/icons/obj/module.dmi b/icons/obj/module.dmi
index 087ceb08b7..517ce37d4b 100644
Binary files a/icons/obj/module.dmi and b/icons/obj/module.dmi differ