Cyborg Overhaul Booty+

Added dickgirl version of all bootyborgs and improved all of the sprites. Ported /tg/station's service, beaker, and circuit manipulator modules and upgrades for their respective borg types. Added rags, soap, crowbar, ect. to appropriate cyborg modules for quality of life improvment. Made similar changes to dog-borgs to bring them up to speed with the rest of the borg modules.
This commit is contained in:
Jessiekhat
2019-11-20 23:49:51 -06:00
parent 3d5ecd62fb
commit 184485c65c
10 changed files with 325 additions and 7 deletions
@@ -744,3 +744,204 @@
..()
hud = new /obj/item/clothing/glasses/hud/security(src)
return
/**********************************************************************
Borg apparatus
***********************************************************************/
//These are tools that can hold only specific items. For example, the mediborg gets one that can only hold beakers and bottles.
/obj/item/borg/apparatus/
name = "unknown storage apparatus"
desc = "This device seems nonfunctional."
icon = 'icons/mob/robot_items.dmi'
icon_state = "hugmodule"
var/obj/item/stored
var/list/storable = list()
/obj/item/borg/apparatus/Initialize()
. = ..()
RegisterSignal(loc.loc, COMSIG_BORG_SAFE_DECONSTRUCT, .proc/safedecon)
/obj/item/borg/apparatus/Destroy()
if(stored)
qdel(stored)
. = ..()
///If we're safely deconstructed, we put the item neatly onto the ground, rather than deleting it.
/obj/item/borg/apparatus/proc/safedecon()
if(stored)
stored.forceMove(get_turf(src))
stored = null
/obj/item/borg/apparatus/Exited(atom/A)
if(A == stored) //sanity check
UnregisterSignal(stored, COMSIG_ATOM_UPDATE_ICON)
stored = null
update_icon()
. = ..()
///A right-click verb, for those not using hotkey mode.
/obj/item/borg/apparatus/verb/verb_dropHeld()
set category = "Object"
set name = "Drop"
if(usr != loc || !stored)
return
stored.forceMove(get_turf(usr))
return
/obj/item/borg/apparatus/attack_self(mob/living/silicon/robot/user)
if(!stored)
return ..()
if(user.client?.keys_held["Alt"])
stored.forceMove(get_turf(user))
return
stored.attack_self(user)
/obj/item/borg/apparatus/pre_attack(atom/A, mob/living/user, params)
if(!stored)
var/itemcheck = FALSE
for(var/i in storable)
if(istype(A, i))
itemcheck = TRUE
break
if(itemcheck)
var/obj/item/O = A
O.forceMove(src)
stored = O
RegisterSignal(stored, COMSIG_ATOM_UPDATE_ICON, /atom/.proc/update_iconb)
update_icon()
return
else
stored.melee_attack_chain(user, A, params)
return
. = ..()
/obj/item/borg/apparatus/attackby(obj/item/W, mob/user, params)
if(stored)
W.melee_attack_chain(user, stored, params)
return
. = ..()
/////////////////
//beaker holder//
/////////////////
/obj/item/borg/apparatus/beaker
name = "beaker storage apparatus"
desc = "A special apparatus for carrying beakers without spilling the contents. Alt-Z or right-click to drop the beaker."
icon_state = "borg_beaker_apparatus"
storable = list(/obj/item/reagent_containers/glass/beaker,
/obj/item/reagent_containers/glass/bottle)
/obj/item/borg/apparatus/beaker/Initialize()
. = ..()
stored = new /obj/item/reagent_containers/glass/beaker/large(src)
RegisterSignal(stored, COMSIG_ATOM_UPDATE_ICON, /atom/.proc/update_iconb)
update_icon()
/obj/item/borg/apparatus/beaker/Destroy()
if(stored)
var/obj/item/reagent_containers/C = stored
C.SplashReagents(get_turf(src))
qdel(stored)
. = ..()
/obj/item/borg/apparatus/beaker/examine()
. = ..()
if(stored)
var/obj/item/reagent_containers/C = stored
. += "The apparatus currently has [C] secured, which contains:"
if(length(C.reagents.reagent_list))
for(var/datum/reagent/R in C.reagents.reagent_list)
. += "[R.volume] units of [R.name]"
else
. += "Nothing."
/obj/item/borg/apparatus/beaker/update_icon()
cut_overlays()
if(stored)
COMPILE_OVERLAYS(stored)
stored.pixel_x = 0
stored.pixel_y = 0
var/image/img = image("icon"=stored, "layer"=FLOAT_LAYER)
var/image/arm = image("icon"="borg_beaker_apparatus_arm", "layer"=FLOAT_LAYER)
if(istype(stored, /obj/item/reagent_containers/glass/beaker))
arm.pixel_y = arm.pixel_y - 3
img.plane = FLOAT_PLANE
add_overlay(img)
add_overlay(arm)
else
var/image/arm = image("icon"="borg_beaker_apparatus_arm", "layer"=FLOAT_LAYER)
arm.pixel_y = arm.pixel_y - 5
add_overlay(arm)
/obj/item/borg/apparatus/beaker/attack_self(mob/living/silicon/robot/user)
if(stored && !user.client?.keys_held["Alt"] && user.a_intent != "help")
var/obj/item/reagent_containers/C = stored
C.SplashReagents(get_turf(user))
loc.visible_message("<span class='notice'>[user] spills the contents of the [C] all over the floor.</span>")
return
. = ..()
/obj/item/borg/apparatus/beaker/extra
name = "secondary beaker storage apparatus"
desc = "A supplementary beaker storage apparatus."
/obj/item/borg/apparatus/beaker/service
name = "beverage storage apparatus"
desc = "A special apparatus for carrying drinks without spilling the contents. Alt-Z or right-click to drop the beaker."
icon_state = "borg_beaker_apparatus"
storable = list(/obj/item/reagent_containers/food/drinks/,
/obj/item/reagent_containers/food/condiment)
/obj/item/borg/apparatus/beaker/service/Initialize()
. = ..()
stored = new /obj/item/reagent_containers/food/drinks/drinkingglass(src)
RegisterSignal(stored, COMSIG_ATOM_UPDATE_ICON, /atom/.proc/update_iconb)
update_icon()
////////////////////
//engi part holder//
////////////////////
/obj/item/borg/apparatus/circuit
name = "circuit manipulation apparatus"
desc = "A special apparatus for carrying and manipulating circuit boards. Alt-Z or right-click to drop the stored object."
icon_state = "borg_hardware_apparatus"
storable = list(/obj/item/circuitboard,
/obj/item/electronics)
/obj/item/borg/apparatus/circuit/Initialize()
. = ..()
update_icon()
/obj/item/borg/apparatus/circuit/update_icon()
cut_overlays()
if(stored)
COMPILE_OVERLAYS(stored)
stored.pixel_x = -3
stored.pixel_y = 0
var/image/arm
if(istype(stored, /obj/item/circuitboard))
arm = image("icon"="borg_hardware_apparatus_arm1", "layer"=FLOAT_LAYER)
else
arm = image("icon"="borg_hardware_apparatus_arm2", "layer"=FLOAT_LAYER)
var/image/img = image("icon"=stored, "layer"=FLOAT_LAYER)
img.plane = FLOAT_PLANE
add_overlay(arm)
add_overlay(img)
else
var/image/arm = image("icon"="borg_hardware_apparatus_arm1", "layer"=FLOAT_LAYER)
add_overlay(arm)
/obj/item/borg/apparatus/circuit/examine()
. = ..()
if(stored)
. += "The apparatus currently has [stored] secured."
/obj/item/borg/apparatus/circuit/pre_attack(atom/A, mob/living/user, params)
. = ..()
if(istype(A, /obj/item/aiModule) && !stored) //If an admin wants a borg to upload laws, who am I to stop them? Otherwise, we can hint that it fails
to_chat(user, "<span class='warning'>This circuit board doesn't seem to have standard robot apparatus pin holes. You're unable to pick it up.</span>")
@@ -514,7 +514,7 @@
/obj/item/robot_module/medical,
/obj/item/robot_module/syndicate_medical,
/obj/item/robot_module/medihound,
/obj/item/robot_module/borgi)
/obj/item/robot_module/borgi)
/obj/item/borg/upgrade/advhealth/action(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -620,6 +620,32 @@
if (RPED)
R.module.remove_module(RPED, TRUE)
/obj/item/borg/upgrade/circuit_app
name = "circuit manipulation apparatus"
desc = "An engineering cyborg upgrade allowing for manipulation of circuit boards."
icon_state = "cyborg_upgrade3"
require_module = TRUE
module_type = list(/obj/item/robot_module/engineering)
/obj/item/borg/upgrade/circuit_app/action(mob/living/silicon/robot/R, user = usr)
. = ..()
if(.)
var/obj/item/borg/apparatus/circuit/C = locate() in R.module.modules
if(C)
to_chat(user, "<span class='warning'>This unit is already equipped with a circuit apparatus!</span>")
return FALSE
C = new(R.module)
R.module.basic_modules += C
R.module.add_module(C, FALSE, TRUE)
/obj/item/borg/upgrade/circuit_app/deactivate(mob/living/silicon/robot/R, user = usr)
. = ..()
if (.)
var/obj/item/borg/apparatus/circuit/C = locate() in R.module.modules
if (C)
R.module.remove_module(C, TRUE)
/obj/item/borg/upgrade/pinpointer
name = "medical cyborg crew pinpointer"
desc = "A crew pinpointer module for the medical cyborg."