diff --git a/code/datums/supplypacks/recreation.dm b/code/datums/supplypacks/recreation.dm index ba6a33d48cb..40caa4c405b 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 bd9f247ec7f..499d535a5cc 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/projectiles/guns/toy.dm b/code/modules/projectiles/guns/toy.dm index e3b90bd1be0..a4ef0dbf3be 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 bb15c848f81..8275a456c9e 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/obj/module.dmi b/icons/obj/module.dmi index 087ceb08b7d..517ce37d4b2 100644 Binary files a/icons/obj/module.dmi and b/icons/obj/module.dmi differ