From 51b289d4c8e79209e6eaa9be4e9eff96d484d0aa Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 26 Oct 2022 04:53:02 -0500 Subject: [PATCH] Change `drop_all_held_items` to work with cyborgs (#70682) * Cyborgs now use the same drop_all_held_items that humans do instead of their own snowflake code. * Fixes Cyborgs not dropping all their modules at the same time, Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> --- code/datums/status_effects/buffs.dm | 11 ++++++----- code/modules/mob/living/silicon/robot/death.dm | 2 +- code/modules/mob/living/silicon/robot/inventory.dm | 8 +++----- code/modules/mob/living/silicon/robot/life.dm | 4 ++-- code/modules/mob/living/silicon/robot/robot.dm | 2 +- code/modules/mob/living/silicon/robot/robot_model.dm | 2 +- 6 files changed, 14 insertions(+), 15 deletions(-) diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 36bf9f4e528..dec44d35567 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -360,13 +360,14 @@ owner.drop_all_held_items() - chainsaw = new(get_turf(owner)) - ADD_TRAIT(chainsaw, TRAIT_NODROP, CHAINSAW_FRENZY_TRAIT) - owner.put_in_hands(chainsaw, forced = TRUE) - chainsaw.attack_self(owner) + if(iscarbon(owner)) + chainsaw = new(get_turf(owner)) + ADD_TRAIT(chainsaw, TRAIT_NODROP, CHAINSAW_FRENZY_TRAIT) + owner.put_in_hands(chainsaw, forced = TRUE) + chainsaw.attack_self(owner) + owner.reagents.add_reagent(/datum/reagent/medicine/adminordrazine, 25) owner.log_message("entered a blood frenzy", LOG_ATTACK) - owner.reagents.add_reagent(/datum/reagent/medicine/adminordrazine, 25) to_chat(owner, span_warning("KILL, KILL, KILL! YOU HAVE NO ALLIES ANYMORE, KILL THEM ALL!")) var/datum/client_colour/colour = owner.add_client_colour(/datum/client_colour/bloodlust) diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm index 626382f6bc8..bf29bf5f771 100644 --- a/code/modules/mob/living/silicon/robot/death.dm +++ b/code/modules/mob/living/silicon/robot/death.dm @@ -27,7 +27,7 @@ builtInCamera.toggle_cam(src,0) toggle_headlamp(TRUE) //So borg lights are disabled when killed. - uneq_all() // particularly to ensure sight modes are cleared + drop_all_held_items() // particularly to ensure sight modes are cleared update_icons() diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index eb98eab25c3..f972cb0d885 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -265,11 +265,9 @@ if(module_active) unequip_module_from_slot(module_active, get_selected_module()) -/** - * Unequips all held items. - */ -/mob/living/silicon/robot/proc/uneq_all() - for(var/cyborg_slot in 1 to 3) +// Technically none of the items are dropped, only unequipped +/mob/living/silicon/robot/drop_all_held_items() + for(var/cyborg_slot in 1 to length(held_items)) if(!held_items[cyborg_slot]) continue unequip_module_from_slot(held_items[cyborg_slot], cyborg_slot) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index f881365350f..9657f49ee08 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -19,11 +19,11 @@ /mob/living/silicon/robot/proc/use_power(delta_time, times_fired) if(cell?.charge) if(cell.charge <= 100) - uneq_all() + drop_all_held_items() var/amt = clamp(lamp_enabled * lamp_intensity * delta_time, 0.5 * delta_time, cell.charge) //Lamp will use a max of 5 charge, depending on brightness of lamp. If lamp is off, borg systems consume 1 point of charge, or the rest of the cell if it's lower than that. cell.use(amt) //Usage table: 0.5/second if off/lowest setting, 4 = 2/second, 6 = 4/second, 8 = 6/second, 10 = 8/second else - uneq_all() + drop_all_held_items() low_power_mode = TRUE toggle_headlamp(TRUE) diag_hud_set_borgcell() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index eacd4b3bc88..26bdf4b8d69 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -708,7 +708,7 @@ /mob/living/silicon/robot/proc/ResetModel() SEND_SIGNAL(src, COMSIG_BORG_SAFE_DECONSTRUCT) - uneq_all() + drop_all_held_items() shown_robot_modules = FALSE for(var/obj/item/storage/bag in model.contents) // drop all of the items that may be stored by the cyborg diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index cc66fa1294c..aa37fa950c6 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -124,7 +124,7 @@ return var/list/held_modules = cyborg.held_items.Copy() var/active_module = cyborg.module_active - cyborg.uneq_all() + cyborg.drop_all_held_items() modules = list() for(var/obj/item/module in basic_modules) add_module(module, FALSE, FALSE)