Files
Paradise/code/game/objects/items/robot/robot_items.dm
CRUNCH ee13dce3e1 Borg Push Broom Icon Updates When Braced (#31255)
* broom

* Apply suggestions from code review

Co-authored-by: kyunkyunkyun <120701975+kyunkyunkyun@users.noreply.github.com>
Signed-off-by: CRUNCH <143041327+CRUNCH-Borg@users.noreply.github.com>

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

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

---------

Signed-off-by: CRUNCH <143041327+CRUNCH-Borg@users.noreply.github.com>
Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Co-authored-by: kyunkyunkyun <120701975+kyunkyunkyun@users.noreply.github.com>
Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
2025-12-27 09:35:27 +00:00

146 lines
5.1 KiB
Plaintext

/**********************************************************************
Cyborg Spec Items
***********************************************************************/
/obj/item/borg
icon = 'icons/mob/robot_items.dmi'
var/powerneeded // Percentage of power remaining required to run item
/*
The old, instant-stun borg arm.
Keeping it in for adminabuse but the malf one is /obj/item/melee/baton/borg_stun_arm
*/
/obj/item/borg/stun
name = "electrically-charged arm"
icon_state = "elecarm_active"
new_attack_chain = TRUE
var/charge_cost = 30
/obj/item/borg/stun/attack(mob/living/target, mob/living/silicon/robot/user, params)
if(..())
return FINISH_ATTACK
if(ishuman(target))
var/mob/living/carbon/human/H = target
if(H.check_shields(src, 0, "[target]'s [name]", MELEE_ATTACK))
playsound(target, 'sound/weapons/genhit.ogg', 50, TRUE)
return FINISH_ATTACK
if(isrobot(user))
if(!user.cell.use(charge_cost))
return FINISH_ATTACK
user.do_attack_animation(target)
target.Weaken(10 SECONDS)
target.apply_effect(STUTTER, 10 SECONDS)
target.visible_message(SPAN_DANGER("[user] has prodded [target] with [src]!"), \
SPAN_USERDANGER("[user] has prodded you with [src]!"))
playsound(loc, 'sound/weapons/egloves.ogg', 50, TRUE, -1)
add_attack_logs(user, target, "Stunned with [src] ([uppertext(user.a_intent)])")
/obj/item/borg/push_broom
name = "integrated push broom"
desc = "This is my BROOMSTICK! This lightweight broom can be used manually or braced to sweep items as you move."
icon = 'icons/obj/janitor.dmi'
icon_state = "broom0"
base_icon_state = "broom"
force = 6
attack_verb = list("swept", "brushed off", "bludgeoned", "whacked")
new_attack_chain = TRUE
var/braced = FALSE
/obj/item/borg/push_broom/activate_self(mob/user)
if(..())
return
if(!braced)
to_chat(user, SPAN_NOTICE("You brace [src] against the ground in a firm sweeping stance."))
RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(sweep))
RegisterSignal(src, COMSIG_CYBORG_ITEM_DEACTIVATED, PROC_REF(stow_broom))
else
to_chat(user, SPAN_NOTICE("You unbrace [src] from the ground and enter a neutral stance."))
UnregisterSignal(user, COMSIG_MOVABLE_MOVED)
UnregisterSignal(src, COMSIG_CYBORG_ITEM_DEACTIVATED)
braced = !braced
update_icon(UPDATE_ICON_STATE)
return ITEM_INTERACT_COMPLETE
/obj/item/borg/push_broom/update_icon_state()
icon_state = "[base_icon_state][braced]"
/obj/item/borg/push_broom/interact_with_atom(atom/target, mob/living/user, list/modifiers)
// Can we sweep it? No? Violence is the solution.
if(!isitem(target) && !isturf(target))
return NONE
sweep(user, target, FALSE)
return ITEM_INTERACT_COMPLETE
/obj/item/borg/push_broom/proc/stow_broom(datum/source, mob/user)
SIGNAL_HANDLER // COMSIG_CYBORG_ITEM_DEACTIVATED
braced = FALSE
update_icon(UPDATE_ICON_STATE)
to_chat(user, SPAN_NOTICE("You unbrace [src] and stow it away."))
UnregisterSignal(user, COMSIG_MOVABLE_MOVED)
UnregisterSignal(src, COMSIG_CYBORG_ITEM_DEACTIVATED)
/obj/item/borg/push_broom/proc/sweep(mob/user, atom/A, moving = TRUE)
SIGNAL_HANDLER // COMSIG_MOVABLE_MOVED
var/turf/current_item_loc = moving ? user.loc : (isturf(A) ? A : A.loc)
if(!isturf(current_item_loc))
return
var/turf/new_item_loc = get_step(current_item_loc, user.dir)
var/obj/machinery/disposal/target_bin = locate(/obj/machinery/disposal) in new_item_loc.contents
var/obj/structure/janitorialcart/jani_cart = locate(/obj/structure/janitorialcart) in new_item_loc.contents
var/obj/vehicle/janicart/jani_vehicle = locate(/obj/vehicle/janicart) in new_item_loc.contents
var/trash_amount = 1
for(var/obj/item/garbage in current_item_loc.contents)
if(garbage.anchored)
continue
var/obj/item/storage/bag/trash/bag = jani_vehicle?.mybag || jani_cart?.my_bag
var/obj/trashed_into
if(bag?.can_be_inserted(garbage, TRUE))
bag.handle_item_insertion(garbage, user, TRUE)
trashed_into = bag
else if(target_bin)
move_into_storage(user, target_bin, garbage)
trashed_into = target_bin
else
garbage.Move(new_item_loc, user.dir)
if(trashed_into)
to_chat(user, SPAN_NOTICE("You sweep the pile of garbage into [trashed_into]."))
trash_amount++
if(trash_amount > 20)
break
if(trash_amount > 1)
playsound(loc, 'sound/weapons/sweeping.ogg', 70, TRUE, -1)
/obj/item/borg/push_broom/proc/move_into_storage(mob/user, obj/storage, obj/trash)
trash.forceMove(storage)
storage.update_icon()
/obj/item/borg/push_broom/combat
name = "cyborg combat broom"
desc = "A steel-core push broom for the hostile cyborg."
attack_verb = list("smashed", "slammed", "whacked", "thwacked", "swept")
force = 20
/obj/item/borg/push_broom/combat/attack(mob/living/target, mob/living/user, params)
if(!ishuman(target))
return ..()
var/mob/living/carbon/human/H = target
if(H.stat != CONSCIOUS || IS_HORIZONTAL(H))
return ..()
H.visible_message(
SPAN_DANGER("[user] sweeps [H]'s legs out from under [H.p_them()]!"),
SPAN_USERDANGER("[user] sweeps your legs out from under you!"),
SPAN_ITALICS("You hear sweeping.")
)
playsound(get_turf(user), 'sound/effects/hit_kick.ogg', 50, TRUE, -1)
H.apply_damage(20, BRUTE)
H.KnockDown(4 SECONDS)
add_attack_logs(user, H, "Leg swept with cyborg combat broom", ATKLOG_ALL)