Refactors borg grippers, service now has a specialized gripper. (#24596)

* Fixing some minor typos for cyborg upgrade flavour text

Throws in some missing apostrophes, capitalisation, and the letter "s."

* Briefcase Full of Cash buff

Increases the amount of cash in the Syndicate Briefcase Full of Cash from 600 Cr to 1000 Cr

* Reverts double-feature PR

* Reverts a broken revert

* Reverting again because Ebba told me to

* And reverting yet again

* Most of the stuff

Most of the refactor. Needs to fix medical borg doing shrapnel extraction.

* Forgot this

* fixing space intent

* Newline

* Update code/game/objects/items/robot/cyborg_gripper.dm

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

* Update code/game/objects/items/robot/cyborg_gripper.dm

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

* Update code/game/objects/items/robot/cyborg_gripper.dm

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

* Update code/game/objects/items/robot/cyborg_gripper.dm

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

* More improvement

* CI fixes

* GO AWAY SPACE INDENTATION I DIDN'T PUT YOU THERE AAAAA

* oops mb mb

* Makes this work with ebba's PR

* get dat fokkin disk

* Update cyborg_gripper.dm

* Removes all nuclear stuff

* Update code/game/objects/items/robot/cyborg_gripper.dm

Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

* Update code/game/objects/items/robot/cyborg_gripper.dm

Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>

* Update cyborg_gripper.dm

* Update code/game/objects/items/robot/cyborg_gripper.dm

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

* Update code/game/objects/items/robot/cyborg_gripper.dm

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

* Update cyborg_gripper.dm

* coin flipping

* Update cyborg_gripper.dm

* Update code/game/objects/items/robot/cyborg_gripper.dm

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>

* EOL comments no longer EOL

* autodoc

* Update cyborg_gripper.dm

* can hold all

* Update code/game/objects/items/robot/cyborg_gripper.dm

Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com>

* Oh hi mark!

* Update code/game/objects/items/robot/cyborg_gripper.dm

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com>

* Line split

* Some comments, examine().

Examining a gripper now tells you what's inside.

---------

Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com>
Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
This commit is contained in:
CRUNCH
2024-05-17 12:43:06 +00:00
committed by GitHub
co-authored by DGamerL Henri215 Luc
parent ad48f54c60
commit 1933d2fab3
9 changed files with 257 additions and 174 deletions
@@ -1,162 +1,3 @@
//Simple borg hand.
//Limited use.
/// This isn't a drone item, also in engineering cyborg kits
/obj/item/gripper_engineering
name = "magnetic gripper"
desc = "A simple grasping tool for synthetic assets."
icon = 'icons/obj/device.dmi'
icon_state = "gripper"
actions_types = list(/datum/action/item_action/drop_gripped_item)
//Has a list of items that it can hold.
var/list/can_hold = list(
/obj/item/firealarm_electronics,
/obj/item/airalarm_electronics,
/obj/item/airlock_electronics,
/obj/item/firelock_electronics,
/obj/item/intercom_electronics,
/obj/item/apc_electronics,
/obj/item/tracker_electronics,
/obj/item/stock_parts,
/obj/item/vending_refill,
/obj/item/mounted/frame/light_fixture,
/obj/item/mounted/frame/apc_frame,
/obj/item/mounted/frame/alarm_frame,
/obj/item/mounted/frame/firealarm,
/obj/item/mounted/frame/display/newscaster_frame,
/obj/item/mounted/frame/intercom,
/obj/item/mounted/frame/extinguisher,
/obj/item/mounted/frame/light_switch,
/obj/item/assembly/prox_sensor,
/obj/item/rack_parts,
/obj/item/camera_assembly,
/obj/item/tank,
/obj/item/circuitboard,
/obj/item/stack/tile/light,
/obj/item/stack/ore/bluespace_crystal,
/obj/item/assembly/igniter,
/obj/item/light
)
//Item currently being held.
var/obj/item/gripped_item = null
/obj/item/gripper_medical
name = "medical gripper"
desc = "A grasping tool used to help patients up once surgery is complete, or to substitute for hands in surgical operations."
icon = 'icons/obj/device.dmi'
icon_state = "gripper"
/obj/item/gripper_medical/afterattack(atom/target, mob/living/user, proximity, params)
if(!proximity || !target || !ishuman(target))
return
var/mob/living/carbon/human/pickup_target = target
if(!IS_HORIZONTAL(pickup_target))
return
pickup_target.AdjustSleeping(-10 SECONDS)
pickup_target.AdjustParalysis(-6 SECONDS)
pickup_target.AdjustStunned(-6 SECONDS)
pickup_target.AdjustWeakened(-6 SECONDS)
pickup_target.AdjustKnockDown(-6 SECONDS)
pickup_target.stand_up()
playsound(user.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
user.visible_message( \
"<span class='notice'>[user] shakes [pickup_target] trying to wake [pickup_target.p_them()] up!</span>",\
"<span class='notice'>You shake [pickup_target] trying to wake [pickup_target.p_them()] up!</span>",\
)
/obj/item/gripper_engineering/Initialize(mapload)
. = ..()
can_hold = typecacheof(can_hold)
/obj/item/gripper_engineering/ui_action_click(mob/user)
drop_gripped_item()
/obj/item/gripper_engineering/attack_self(mob/user)
if(!gripped_item)
to_chat(user, "<span class='warning'>[src] is empty.</span>")
return
gripped_item.attack_self(user)
/obj/item/gripper_engineering/proc/drop_gripped_item(silent = FALSE)
if(!gripped_item)
return
if(!silent)
to_chat(loc, "<span class='warning'>You drop [gripped_item].</span>")
gripped_item.forceMove(get_turf(src))
gripped_item = null
/obj/item/gripper_engineering/attack(mob/living/carbon/M, mob/living/carbon/user)
return
/// Grippers are snowflakey so this is needed to to prevent forceMoving grippers after `if(!user.drop_item())` checks done in certain attackby's. // What does this even MEAN - GDN
/obj/item/gripper_engineering/forceMove(atom/destination)
return
/obj/item/gripper_engineering/afterattack(atom/target, mob/living/user, proximity, params)
if(!target || !proximity) //Target is invalid or we are not adjacent.
return FALSE
if(gripped_item) //Already have an item.
//Pass the attack on to the target. This might delete/relocate gripped_item.
if(!target.attackby(gripped_item, user, params))
// If the attackby didn't resolve or delete the target or gripped_item, afterattack
// (Certain things, such as mountable frames, rely on afterattack)
gripped_item?.afterattack(target, user, 1, params)
//If gripped_item either didn't get deleted, or it failed to be transfered to its target
if(!gripped_item && length(contents))
gripped_item = contents[1]
return FALSE
else if(gripped_item && !length(contents))
gripped_item = null
else if(isitem(target)) //Check that we're not pocketing a mob.
var/obj/item/I = target
if(is_type_in_typecache(I, can_hold)) // Make sure the item is something the gripper can hold
to_chat(user, "<span class='notice'>You collect [I].</span>")
I.forceMove(src)
gripped_item = I
else
to_chat(user, "<span class='warning'>Your gripper cannot hold [target].</span>")
return FALSE
else if(istype(target,/obj/machinery/power/apc))
var/obj/machinery/power/apc/A = target
if(A.opened)
if(A.cell)
gripped_item = A.cell
A.cell.add_fingerprint(user)
A.cell.update_icon()
A.cell.forceMove(src)
A.cell = null
A.charging = APC_NOT_CHARGING
A.update_icon()
user.visible_message("<span class='warning'>[user] removes the power cell from [A]!</span>", "You remove the power cell.")
else if(istype(target, /obj/machinery/cell_charger))
var/obj/machinery/cell_charger/cell_charger = target
if(cell_charger.charging)
gripped_item = cell_charger.charging
cell_charger.charging.add_fingerprint(user)
cell_charger.charging.forceMove(src)
cell_charger.removecell()
else if(istype(target, /obj/machinery/light))
var/obj/machinery/light/light = target
var/obj/item/light/L = light.drop_light_tube()
L.forceMove(src)
gripped_item = L
user.visible_message("<span class='notice'>[user] removes the light from the fixture.</span>", "<span class='notice'>You dislodge the light from the fixture.</span>")
return TRUE
/obj/item/matter_decompiler
name = "matter decompiler"
desc = "Eating trash, bits of glass, or other debris will replenish your stores."
@@ -116,7 +116,7 @@
return 0
/mob/living/silicon/robot/drop_item()
var/obj/item/gripper_engineering/G = get_active_hand()
var/obj/item/gripper/G = get_active_hand()
if(istype(G))
G.drop_gripped_item(silent = TRUE)
return TRUE // The gripper is special because it has a normal item inside that we can drop.
@@ -1698,7 +1698,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
/// Used in `robot.dm` when the user presses "Q" by default.
/mob/living/silicon/robot/proc/on_drop_hotkey_press()
var/obj/item/gripper_engineering/G = get_active_hand()
var/obj/item/gripper/G = get_active_hand()
if(istype(G) && G.gripped_item)
G.drop_gripped_item() // if the active module is a gripper, try to drop its held item.
else
@@ -354,7 +354,7 @@
/obj/item/stack/medical/ointment/advanced/cyborg,
/obj/item/stack/medical/splint/cyborg,
/obj/item/stack/nanopaste/cyborg,
/obj/item/gripper_medical
/obj/item/gripper/medical
)
malf_modules = list(/obj/item/gun/syringemalf)
special_rechargables = list(
@@ -362,6 +362,11 @@
/obj/item/gun/syringemalf
)
/obj/item/robot_module/medical/handle_death(mob/living/silicon/robot/R, gibbed)
var/obj/item/gripper/medical/G = locate(/obj/item/gripper/medical) in modules
if(G)
G.drop_gripped_item(silent = TRUE)
// Disable safeties on the borg's defib.
/obj/item/robot_module/medical/emag_act(mob/user)
. = ..()
@@ -451,7 +456,7 @@
/obj/item/analyzer,
/obj/item/geiger_counter/cyborg,
/obj/item/holosign_creator/engineering,
/obj/item/gripper_engineering,
/obj/item/gripper/engineering,
/obj/item/matter_decompiler,
/obj/item/painter,
/obj/item/areaeditor/blueprints/cyborg,
@@ -471,7 +476,7 @@
special_rechargables = list(/obj/item/extinguisher, /obj/item/weldingtool/largetank/cyborg, /obj/item/gun/energy/emitter/cyborg)
/obj/item/robot_module/engineering/handle_death(mob/living/silicon/robot/R, gibbed)
var/obj/item/gripper_engineering/G = locate(/obj/item/gripper_engineering) in modules
var/obj/item/gripper/engineering/G = locate(/obj/item/gripper/engineering) in modules
if(G)
G.drop_gripped_item(silent = TRUE)
@@ -604,7 +609,8 @@
/obj/item/reagent_containers/dropper/cyborg,
/obj/item/lighter/zippo,
/obj/item/storage/bag/tray/cyborg,
/obj/item/reagent_containers/drinks/shaker
/obj/item/reagent_containers/drinks/shaker,
/obj/item/gripper/service
)
emag_override_modules = list(/obj/item/reagent_containers/drinks/cans/beer/sleepy_beer)
emag_modules = list(/obj/item/restraints/handcuffs/cable/zipties/cyborg, /obj/item/instrument/guitar/cyborg)
@@ -615,6 +621,10 @@
/obj/item/gun/projectile/shotgun/automatic/combat/cyborg
)
/obj/item/robot_module/butler/handle_death(mob/living/silicon/robot/R, gibbed)
var/obj/item/gripper/service/G = locate(/obj/item/gripper/service) in modules
if(G)
G.drop_gripped_item(silent = TRUE)
// This is a special type of beer given when emagged, one sip and the target falls asleep.
/obj/item/reagent_containers/drinks/cans/beer/sleepy_beer
@@ -706,7 +716,7 @@
/obj/item/gun/projectile/revolver/grenadelauncher/multi/cyborg,
/obj/item/card/emag,
/obj/item/crowbar/cyborg/red,
/obj/item/pinpointer/operative
/obj/item/pinpointer/operative,
)
// Sydicate medical cyborg module.
@@ -739,7 +749,7 @@
/obj/item/stack/nanopaste/cyborg/syndicate,
/obj/item/gun/medbeam,
/obj/item/extinguisher/mini,
/obj/item/gripper_medical
/obj/item/gripper/medical,
)
special_rechargables = list(/obj/item/extinguisher/mini)
@@ -760,7 +770,7 @@
/obj/item/multitool/cyborg,
/obj/item/t_scanner,
/obj/item/analyzer,
/obj/item/gripper_engineering,
/obj/item/gripper/engineering,
/obj/item/melee/energy/sword/cyborg,
/obj/item/card/emag,
/obj/item/borg_chameleon,
@@ -846,7 +856,7 @@
/obj/item/wirecutters/cyborg/drone,
/obj/item/multitool/cyborg/drone,
/obj/item/lightreplacer/cyborg,
/obj/item/gripper_engineering,
/obj/item/gripper/engineering,
/obj/item/matter_decompiler,
/obj/item/reagent_containers/spray/cleaner/drone,
/obj/item/soap,
@@ -870,7 +880,7 @@
)
/obj/item/robot_module/drone/handle_death(mob/living/silicon/robot/R, gibbed)
var/obj/item/gripper_engineering/G = locate(/obj/item/gripper_engineering) in modules
var/obj/item/gripper/engineering/G = locate(/obj/item/gripper/engineering) in modules
if(G)
G.drop_gripped_item(silent = TRUE)