From 791e0abdcab2a9944b6ce0254b009c9cc0080f6d Mon Sep 17 00:00:00 2001 From: Geeves <22774890+Geevies@users.noreply.github.com> Date: Wed, 29 Jul 2026 18:34:47 +0200 Subject: [PATCH] Autakh Deployable Baton (#22926) * The Autakh integrated stun baton can now be deployed and used like a normal baton. The ten second cooldown between hits, reduced stats, and nutrition loss for use remains as before. AI usage disclosure: The code for this was created in-part using GPT 5.6 Sol. (Sprites done manually by myself.) --- code/modules/organs/subtypes/autakh.dm | 89 ++++++++++++++---- .../geeves-autakh_deployable_baton.yml | 6 ++ icons/obj/item/autakh_baton.dmi | Bin 0 -> 1529 bytes 3 files changed, 76 insertions(+), 19 deletions(-) create mode 100644 html/changelogs/geeves-autakh_deployable_baton.yml create mode 100644 icons/obj/item/autakh_baton.dmi diff --git a/code/modules/organs/subtypes/autakh.dm b/code/modules/organs/subtypes/autakh.dm index afcf7616c9c..184c009f0de 100644 --- a/code/modules/organs/subtypes/autakh.dm +++ b/code/modules/organs/subtypes/autakh.dm @@ -411,7 +411,8 @@ /obj/item/organ/external/hand/right/autakh/security name = "security grasper" - action_button_name = "Activate Integrated Electroshock Weapon" + action_button_name = "Deploy Integrated Stun Baton" + var/augment_type = /obj/item/melee/baton/autakh /obj/item/organ/external/hand/right/autakh/security/refresh_action_button() . = ..() @@ -433,6 +434,10 @@ to_chat(owner, SPAN_DANGER("You can not use \the [src] in your current state!")) return + if(owner.get_active_hand()) + to_chat(owner, SPAN_DANGER("You must empty your active hand before enabling your [src]!")) + return + if(is_broken()) to_chat(owner, SPAN_DANGER("\The [src] is too damaged to be used!")) return @@ -440,30 +445,76 @@ if(is_bruised()) spark(get_turf(owner), 3) - var/obj/item/grab/G = owner.get_active_hand() - if(!istype(G)) - to_chat(owner, SPAN_DANGER("You must grab someone before trying to use your [src]!")) - return + var/obj/item/M = new augment_type(owner) + owner.put_in_active_hand(M) + owner.visible_message(SPAN_NOTICE("\The [M] slides out of \the [owner]'s [src]."), + SPAN_NOTICE("You deploy \the [M]!")) - if(owner.nutrition <= 200) - to_chat(owner, SPAN_DANGER("Your energy reserves are too low to use your [src]!")) - return +/obj/item/melee/baton/autakh + name = "integrated stun baton" + desc = "An electroshock baton integrated into an Aut'akh security grasper. It retracts when released." + icon = 'icons/obj/item/autakh_baton.dmi' + icon_state = "autakh_baton" + item_state = "autakh_baton" + contained_sprite = TRUE + force = 5 + agonyforce = 50 + status = TRUE + sheathed = TRUE - if(ishuman(G.affecting)) +/obj/item/melee/baton/autakh/mechanics_hints(mob/user, distance, is_adjacent) + . = list() + . += "Left-click the baton in-hand to toggle its electroshock function." + . += "On Harm intent, it inflicts damage whether or not the electroshock function is on." + . += "The baton draws power from its user's energy reserves and retracts when dropped." - var/mob/living/carbon/human/H = G.affecting - var/target_zone = check_zone(owner.zone_sel.selecting) +/obj/item/melee/baton/autakh/feedback_hints(mob/user, distance, is_adjacent) + . = list() + if(distance > 1) + return + . += "The baton is powered by its user's energy reserves." - owner.last_special = world.time + 100 - owner.adjustNutritionLoss(50) +/obj/item/melee/baton/autakh/update_icon() + icon_state = status ? "[initial(icon_state)]_active" : initial(icon_state) + if(status) + set_light(1.3, 1, baton_color) + else + set_light(0) - if(owner.a_intent == I_HURT) - H.electrocute_act(10, owner, def_zone = target_zone) - else - H.stun_effect_act(0, 50, target_zone, owner) +/obj/item/melee/baton/autakh/attack_self(mob/user) + status = !status + to_chat(user, SPAN_NOTICE("[src] is now [status ? "on" : "off"].")) + playsound(loc, SFX_SPARKS, 75, 1, -1) + update_icon() + add_fingerprint(user) - owner.visible_message(SPAN_DANGER("[H] has been prodded with [src] by [owner]!")) - playsound(get_turf(owner), 'sound/weapons/Egloves.ogg', 50, 1, -1) +/obj/item/melee/baton/autakh/attack(mob/living/target_mob, mob/living/user, target_zone) + if(status) + if(user.last_special > world.time) + to_chat(user, SPAN_DANGER("\The [src] is still recharging!")) + return FALSE + if(user.nutrition <= 200) + to_chat(user, SPAN_DANGER("Your energy reserves are too low to use \the [src]!")) + return FALSE + + . = ..() + if(. && status) + user.last_special = world.time + 10 SECONDS + user.adjustNutritionLoss(50) + +/obj/item/melee/baton/autakh/deductcharge(chrgdeductamt) + return TRUE + +/obj/item/melee/baton/autakh/attackby(obj/item/attacking_item, mob/user) + return + +/obj/item/melee/baton/autakh/throw_at() + usr.drop_from_inventory(src) + +/obj/item/melee/baton/autakh/dropped() + . = ..() + loc = null + qdel(src) /obj/item/organ/external/hand/right/autakh/tool/nullrod name = "blessed prosthesis" diff --git a/html/changelogs/geeves-autakh_deployable_baton.yml b/html/changelogs/geeves-autakh_deployable_baton.yml new file mode 100644 index 00000000000..f92177e1e92 --- /dev/null +++ b/html/changelogs/geeves-autakh_deployable_baton.yml @@ -0,0 +1,6 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "The Autakh integrated stun baton can now be deployed and used like a normal baton. The ten second cooldown between hits, reduced stats, and nutrition loss for use remains as before." diff --git a/icons/obj/item/autakh_baton.dmi b/icons/obj/item/autakh_baton.dmi new file mode 100644 index 0000000000000000000000000000000000000000..92a9f29c6fabcfd6ddb7c1bd579c3183b235d861 GIT binary patch literal 1529 zcmb7Ec`(}v6#mhoV##J@sHRFOszurw_Yp_hG+0fYX%meGrM3jM>y}ihTQ}Iaf~JQm zEp7F11~poXiK~jLjZLMYgiV7ulGyD2x6}T!f4uk2eDmhb_uiZDWn(;1s-S%!0030c zr;%PVr2G?m6lJ-`@#26CY7%|0vB;3CK{1!3VlR^-0U(~9U(gLobK09ew2kP!<*#gU zXY2yez<&N{9}U+Q9QlxZio|xlo$E3fqR7-Te9f@;Q}qcL34S#%2C|7oh4C!~riWhG zDF5_f{LB7R@2==V7K|1vBF>aczNgOP_a3BDn|G&JH4)NrDVMCuxU4El4h7t zm~!&ANGg{-(;rSE=l1HrUmel8a|J4Et~9*mRp-ICBm#hf8XD>B6Hn*U9m1f_dvA2A z!_Io&g}6g}yztRkdyJOe(vvlt-i zFklS@_JaUV{oPru(eTf&JBE3XoLU(C)J*)y92w_#K>^WGW<;n#A`hVp{nmETjAS*d zZoH7%WC(RA*IyXQ1}pu3vsG~WLoTV(msm_lQQW|Z$FX;3BHarQC2)giNO)>iGL_FU zLcMUw+aU=2;o27cjfNCIv22S8)-xq014p!Ql4qR&iTyqdY`y%exb{_Z~?QE~;H~5M6jfp=b#V{1vX6S&gxC}+&_AD{7 z3qnk~`f|ye*Gep+d{S3~CHU5w3oR@iU-3ub&5k^Buz*y*y-;2bPolfIJJoVD71Vsi zX_#I(2>*OTPcP|5PhE6jyKIC`c1hVFNr2*Rn=q?(Y=t;+x43MgELw2#I|Zz-8!P8D zE#zr?`;sK6q-uw;BcS)KKb*BAYv%1R`%uS?nOT1(Q4SYeg;0HrSFVRLXT%J1r&wJU zcW#}Xh=IOIsPn0}R@OYmCP*=Iqbqd=ZgvMv2Q$|OMJ0sKTDot2-Xx1Q^EXapm74oe z=AG!^2CH7%x#ef2D@Qw5?*r^bU7=)ddegS_t%l>Sug|LX)wTT;j?FN_^qcb;dCm^&Tk zXHHf(!fhOdnU5M7+v<~j)mR|qy{H30Ag~8MwIv=FI!L>tC;P1`<8F!ya1m4qV7B;-Q93W7bk(Zsr=gTV3R{En64(^H#*%j)>JSr z5R`gO=JJ_iXle5zY1PEEBG*@tF5TA(dcFdl-CAbz zKWaWO)ZN}i;WZ%u>tw}my5#G1{%f9Z(}C2+xFOz1VOv0tS(KjBGboR+Qq?$~@wmHp z!Svh|z0ejN7(fX#X8Bv*pX033_^vC7qc-C)#@BLT1CdQ(k2V(YlcwX0VT1WACfK92 zde}fYP?@i=!O^^XwQjt^!C>*tGPXs{jAT+@;c5p{X?f&agow4&_~JjrwrhLRY}c&V z-2O!7@MJLXZHfPn#^|T<)f$36Uax_~#zkqvbke)V^EokbQO0t3E5|U9Sp#)3LUgZM z4sYQY_Jdhu@mf&a`Hm@XR-&0lyIrXR@Y>sB%CZ94oHpH~eYOOaAy4TM{pSnGRPwAA XV$`&1I5@cMmjmdNp2!B5z_h;sCQ8L# literal 0 HcmV?d00001